那位高手帮忙看下我这个程序错哪里了 帮忙改下 谢谢
#include <stdio.h>#include <time.h>//时间函数
#include <string.h>
#include <stdlib.h>
FILE *fp;
struct computer//定义computer结构体
{
int num;//计算机序号
char zhuangtai[30];//状态
char peizhi[40];//配置
}com[10];
struct record //定义 record结构体
{
int num1,num2; //计算机序号num1和学生学号num2
char name[10],start[30],end[30];//学生姓名name、开始上机时间start、下机时间end
}rec[10],rec1[10];
char * nowtime()//定义时间函数,调用系统时间
{ char tim[30];
time_t it;
time(&it);
//printf("\t当前时间为北京时间%s\n",ctime(&it));//将时间转换为字符串
strcpy(tim,ctime(&it));//将时间字符串复制给tim
return 0;
}
int page()//优化函数,进度条显示
{
int i;
printf("\n\n\n\n\n\n\n================系统启动中,请稍后……………………\n\n\n\n\n\n\n\n");
for(i=0; i<39;i++)//表示循环40次
{
printf("==");
}
printf("=\r");
for(i=0; i<40;i++)//表示循环40次
{
_sleep(20);//停止20毫秒
printf(">>");
}
return 0;
}
/*int pwdvalidate() //密码验证程序,密码正确则返回0,错误则返回1
{
FILE *pass;
char pwd[9],pwdval[9],i;
if((pass=fopen("paswd","rt"))==NULL)
return 0;
else
{
fgets(pwd,9,pass);
for(i=1;i<=8;i++)
pwd[i-1]-=2*i+3; //密码解密
printf("\n请输入密码\n");
scanf("%s",&pwdval);
if((strcmp(pwd,pwdval))==0)
return 0;
else
return 1;
}
}*/
void save()
{
FILE *fp;
int i;
if((fp=fopen("com_list.txt","r+"))==NULL)
{
printf("\n\n对不起无法打开源文件!!\n");
return;
}
for (i=0;i<10;i++)
if (fwrite(&com[i],sizeof(struct computer),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void luru()//定义计算机信息录入函数
{
int i;
char a;
printf("\n\n\n\t\t\t!!!警告警告!!!\n\n\n\t您确认计算机信息已经失效,并且必须重新录入吗?\n");
printf("\t确认重新输入请按Y,退出操作请按N:");
scanf("%c",&a);
while(a=='y'||a=='Y')
{
for(i=0;i<10;i++)
{
printf("\n请输入该计算机序号:");
scanf("%d",&com[i].num);
printf("请输入该计算机配制:");
scanf("%s",com[i].peizhi);
printf("请输入该计算机当前状态:");
scanf("%s",com[i].zhuangtai);
save();//将输入的数据读入文件(com_list.txt)中
}
printf("数据写入成功,按任意键返回主菜单!");
getchar ();system("cls");break;
//if(a=='n'||a=='N')
}
}
/*void save()
{
FILE *fp;
int i;
if((fp=fopen("com_list.txt","a+"))==NULL)
{
printf("\n\n对不起无法打开源文件!!\n");
return;
}
if (fwrite(&com[i],sizeof(struct computer),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void luru()//定义计算机信息录入函数
{
int i;
char a;
printf("\n\n\n\t\t\t!!!警告警告!!!\n\n\n\t您确认计算机信息已经失效,并且必须重新录入吗?\n");
printf("\n\t确认重新输入请按Y,退出操作请按N:");
a=getchar();
printf("\n");
if (a=='y'||a=='Y')
{
for(i=0;i<10;i++)
{
printf("\n请输入该计算机序号:");
scanf("%d",&com[i].num);
printf("请输入该计算机配制:");
scanf("%s",com[i].peizhi);
printf("请输入该计算机当前状态:");
scanf("%s",com[i].zhuangtai);
save();//将输入的数据读入文件(com_list.txt)中
}
printf("\n\t数据写入成功\n\t按任意键返回……");
getch();
}
else if (a=='N'||a=='n')
system("cls");//清屏
}*/
void quanbu()//定义全部显示函数
{
int i=0,comnum=0;
fp=fopen("com_list.txt","r");
printf("\n\n\n\t序号 \t配置\t\t\t\t\t状态\n\n");
/*for(i=0;i<10;i++)
{
fread(&com[i],sizeof(struct computer),1,fp);//从文件中读取所有计算机的信息
printf("\t%d\t%10s\t %10s\n\n",com[i].num,com[i].peizhi,com[i].zhuangtai);
}//将所有计算机的信息显示在屏幕上
fclose(fp);
getch();
printf("按任意键返回……");*/
while(fread(&com[i],sizeof(struct computer),1,fp)==1) //文件读取完毕后将返回0
{
printf("\t%d\t%10s\t %10s\n\n",com[i].num,com[i].peizhi,com[i].zhuangtai);
comnum++;
}
printf("\n所有信息显示完毕!!共有%d台计算机\n\n按任意键返回……\n\n",comnum);
fclose(fp);
getchar();//按任意键返回
system("cls");
}
void dange()//定义单个查询函数
{
int i;
char a;
do//使用do while循环
{
printf("\n\n请输入需要查找的计算机序号(1-10):");
scanf("%d",&i);
fp=fopen("com_list.txt","r");
printf("\n该计算机序号为:%d\n",com[i-1].num);
printf("\n该计算机配置为: %10s\n",com[i-1].peizhi);
printf("\n该计算机当前状态为:%10s\n",com[i-1].zhuangtai);
printf("\n");
printf("是否继续查询?是Y/否N:");
a=getchar();
system("cls");
if(a=='N'||a=='n')//输入“n”或“N”返回主函数
break;
}while(a=='Y'||a=='y');//输入“y”或“Y”继续循环
system("cls");//清屏
}
void search()//定义计算机信息查找函数
{
int i=0;
char t;
FILE *fp;
if((fp=fopen("com_list.txt","r"))==NULL)//先判断文件是否存在
{
printf("\n\n\n\n\t对不起!!源文件遭到破坏,读取文件出错!!\n\n\n");
printf("\t请在主菜单中选择1,重新录入计算机信息!!\n\n\t按任意键返回……");
getchar();
system("cls");
return;
}
else
{
while((fread(&com[i],sizeof(struct computer),1,fp))==1)
i++;
printf("\n数据库载入完成\n");
}
while(1)
{
printf("\n\t\t【1】 查 询 所 有 计 算 机 信 息\n\n\t\t");
printf("【2】 按 计 算 机 序 号 查 询\n\n\t\t");
printf("【3】 返回主菜单\n\n\t\t");
//查询的副菜单
printf("请输入您需要的操作:");
t=getchar();
if (t=='1')
quanbu();
else if(t=='2')
dange();
else if(t=='3')
system("cls");
break;
}
}
void shangji()//定义上机函数
{
FILE *fp;
int i=0;
printf("\n请在输入您的信息后上机!!\n");
printf("\n请输入您所用计算机的序号(1--10):");
scanf("%d",&rec[i].num1);
printf("\n输入您的学号:");
scanf("%d",&rec[i].num2);
printf("\n请输入您的姓名:");
scanf("%s",rec[i].name);
printf("\n");
strcpy(rec[i].start,nowtime());//调用nowtime函数将时间的字符串复制给结构体中的start
if((fp=fopen("lishi.txt","w"))==NULL)
{
printf("\n\n对不起无法打开源文件!!\n");
return;
}
if((fwrite(&rec[i],sizeof(struct record),1,fp))!=1)
printf("\n数据写入失败!!");
fclose(fp);
printf("\n\t%s您的计算机已经开通\n\n\t现在开始计时,请上机!\n",rec[i].name);
printf("\n按任意键返回!\n");
getchar();
system("cls");
}
void xiaji()//定义下机函数
{
FILE *fp,*fp1;
int i,ii,j;
char a;
struct record rec1[10];
printf("\n\n\n您是否要下机?(Y/N):");
a=getchar();
printf("\n");
while(a=='y'||a=='Y')
{
fp=fopen("lishi.txt","rb");
for(i=0;;i++)
{if(fread(&rec1[i],sizeof(struct record),1,fp)==0)
break;
}
fclose(fp);
printf("\n\t请输入您所使用的计算机的序号:");
scanf("%d",&ii);
printf("\n");
for(j=0;j<=i;j++)
if(rec1[j].num1==ii)
break;
strcpy(rec1[j].end,nowtime());//将是时间字符串复制给结构体中的end
fp1=fopen("lishi2.txt","a+");
if(fwrite(&rec1,sizeof(struct record),1,fp)!=1)
{
printf("\n数据写入失败!!");
break;
}
fclose(fp1);
printf("\t%d号计算机已经被锁定,您可以下机了.\n\n",ii);
break;
if(a=='n'||a=='N')
break;
}
printf("\n按任意键返回!\n");
getchar();
system("cls");
}
/*int search_cmp(char flag, int sear)
{
int i=0;
switch(flag)
{
case '1':
if(sear==rec[i].num1)
return 0;
else
return 1;
case '2':
if(sear==rec[i].num2)
return 0;
else
return 1;
}
return 0;
} */
int jishu()
{
int i;
fp=fopen("lishi2.txt","rb");
for(i=0;;i++)
{
if(fread(&rec1[i],sizeof(struct record),1,fp)==0)
break;
}
return(i);
}
int lishi()
{
// int sear;
// int i,j,a;
int j,i;
system("cls");
//printf("查找计算机信息\n");
if((fp=fopen("lishi2.txt","rt"))==NULL)
{
printf("读取文件出错!\n");
return 1;
}
fread(&rec1[i],sizeof(struct record),1,fp);
//printf("\n\t\t【1】 按计算机序号查找\n\n\t\t【2】 按使用者学号查找\n");
// printf("\n请选择需要查找的信息:");
//scanf("%d",&a);
//printf("\n请输入序号:\n");
//scanf("%d",&sear);
system("cls");
printf("********************************计算机信息*********************************\n\n");
i=jishu();
//if(a==1)
//{
// {
for(j=0;j<=i;j++)
{
//if(sear==rec[j].num1)
//{
printf("计算机序号:%d\t",rec1[j].num1);
printf("\n使用者姓名:%s",rec1[j].name);
printf("\n使用者学号:%d",rec1[j].num2);
printf("\n使用时间段:%s至",rec1[j].start);
printf(" %s",rec1[j].end);
// }
//}
}
/* else
if(a==2)
{
for(j=0;j<=i;j++)
{
if(sear==rec1[j].num2)
printf("计算机序号:%d\t",rec1[j].num1);
printf("\n使用者姓名:%s",rec1[j].name);
printf("\n使用者学号:%d",rec1[j].num2);
printf("\n使用时间段:%s至",rec1[j].start);
printf(" %s",rec1[j].end);
}
}
if(flag!=1)
//printf("抱歉,未找到对应信息,请检查输入是否有误\n");*/
printf("\n\n按任意键返回。。。\n");
getchar();
system("cls");
return 0;
}
/*void lishi()//定义计算机历史信息查询函数
{
FILE *fp;
int i=0, num;
char a;
if((fp=fopen("lishi2.txt","rt"))==NULL)//检查文件
{
printf("\n\n\n\t对不起!!源文件没有录入数据或者遭到破坏,读取文件出错!!\n\n");
printf("\t按任意键返回!");
getch();
}
else
{
while((fread(&rec[i],sizeof(struct record),1,fp))==1)//读取文件成功进行下面的操作
i++;
printf("\n▲数据库载入完成,您现在可以查询计算机的历史记录了!!\n");
do//使用用do while进行查询的循环操作
{
printf("\n\t请输入您要查询的计算机的序号:");
scanf("%d",&num);
num--;
fp=fopen("lishi2.txt","at+");
if(!fread(&rec[i],sizeof(struct record),1,fp))
printf("Error\n");
printf("\n\t%s曾经使用过%d号计算机\n",rec1[num].name,rec1[num].num1);
printf("\n\t该学生学号为:%d\n",rec1[num].num2);
printf("\n\t使用时间段为:%s至%s",rec1[num].start,rec1[num].end);
printf("\n");
printf("\n\t是否继续查询?是Y/否N:");
a=getch();system("cls");
printf("\n");
if(a=='N'||a=='n')
{system("cls");
break;}
}while(a=='Y'||a=='y');
}
system("cls");
}*/
char menu()//主菜单 显示主页面
{
char sh;
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆计★算★机★管★理★系★统◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("********************************************************************************");
printf("\t\t\t\t\t\t\t\t _______\n");
printf("\t\t\t\t\t\t\t\t |制作者:薛某某|\n");
printf("\t\t\t\t\t\t\t\t  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ");
printf("\t\t【1】 录 入 计 算 机 信 息\n\n\t\t");
printf("【2】 查 询 计 算 机 信 息\n\n\t\t");
printf("【3】 查 询 历 史 记 录\n\n\t\t");
printf("【4】 上 机 登 记\n\n\t\t");
printf("【5】 下 机 登 记\n\n\t\t");
printf("【6】 退 出\n");
printf("********************************************************************************");
//nowtime();
printf("请输入您需要的操作:");
sh=getchar();//输入操作代码
return (sh);//返回输入的操作代码
}
void tuichu()
{
printf("\n\n\n===================================感谢您的使用================================\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t设计者:薛某某。\n\t\t\t\t\t");
}
void main()//主函数
{
char a;
//page();
system("cls");
printf("\t=========================西安理工大学==========================\n\n");
while (1)
{
a=menu();//根据menu返回的操作代码执行相应的case
switch(a)//使用switch进行操作
{
case '1':
system("cls");
luru();
break;
case '2':
system("cls");
search();
break;
case '3':
system("cls");
lishi();
break;
case '4':
system("cls");
shangji();
break;
case '5':
system("cls");
xiaji();
break;
case '6':
system("cls");
tuichu();
exit(0);
default:
printf("输入有误,请重新输入\n\n");
continue;
}
}
}