江月何年初照你 2016-12-19 10:10 采纳率: 0%
浏览 1035

求助!我这个链表做的机房收费管理系统运行有错,请帮忙看一下,谢谢。

刚学的,不太会,请大家指正一下。运行上机这部分时,突然终止,弹出对话框提示已停止工作。
#define NULL 0
#include
#include
#include
#include
#include
typedef struct time //时间
{
int hour;
int minute;
int second;
}time;

struct Student //学生信息
{
char num[20]; //学号
char banji[20]; //班级
int flag; //用来标记学生是否上机
char name[20]; //姓名
struct time start,finish; //上机起止时间
};

typedef struct Node
{
struct Student st;
struct Node *pNext;
}NODE,*PNODE;

Student st[30]; //信息库

struct computer //机器信息
{
int f; //用来标记机器是否使用
Student stut; //使用这台机器的学生
}com[30]; //30台机器

int k; //全局变量

int mainmenu() //主菜单
{
char c;
do
{
system("cls"); //清屏
printf("\t\t\t****机房收费管理系统****\n");
printf("\t\t\t1.输入学生信息\n");
printf("\t\t\t2.上机\n");
printf("\t\t\t3.下机\n");
printf("\t\t\t4.查询上机时间\n");
printf("\t\t\t5.机器使用情况显示\n");
printf("\t\t\t0.退出系统\n");
printf("\t\t\t************************\n");
printf("\t\t\t请选择菜单(0-5):");
c=getchar();
}while(c<'0'||c>'5'); //判断输入是否合法
return(c-'0');
}

/*void save() //建立保存文件函数(见书346)
{

     FILE *fp;                                               //定义文件型指针
    int i;
     if((fp=fopen("Student.txt","wb"))==NULL)                //打开输出文件
    {
         printf("不能打开文件!\n");    
         return;                                             //终止程序
    }
     for(i=0;i<k;i++)                                        //向student文件中写入信息
        if(fwrite(&st,sizeof(struct Student),1,fp)!=1)  //地址,要读写的字节数,要读写的数据项,FILE类型指针
            printf("文件写入错误\n");
     fclose(fp);                                             //关闭文件
    printf("\n\n\n\n\t\t\t学生信息保存成功!\n");
     printf("\n\n\n\n\t\t\t按任意键返回菜单!!");

}*/

void InputStudent(PNODE p) //输入学生信息
{
int i=0,len;
PNODE pNew;
// NODE stu; //学生结构
char sign='0';
PNODE pHead=(PNODE)malloc(sizeof(NODE));
PNODE pTail=pHead; //定义一个指向头指针结点的指针
pTail->pNext =NULL;
printf("请输入学生人数");
scanf("%d",&len);

for(i=0;i {
//getchar(); //保持界面
printf("\t\t学号:");
scanf("%s",&pTail->st.num);
printf("\t\t班级:");
scanf("%s",&pTail->st.banji);
printf("\t\t姓名:");
scanf("%s",&pTail->st.name);
pNew==(PNODE)malloc(sizeof(NODE));
//pNew->st=stu.st; //初始化结点的数据域
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;

     /*scanf("%c",&sign);
     {if(sign='N')break;}                                       //判断是否继续输入学生信息
    stu.st.flag=0;                                        //初始化为未上机
    i++;*/
 }

}

void online(PNODE p) //上机
{
char num[20],name[20];
int s;
do
{
printf("\t\t使用姓名按1,使用学号按2:");
scanf("%d",&s);
}while(s!=1&&s!=2);
getchar();
if(s==1)
{
printf("\t\t请输入姓名:");
gets(name);
while(p!=NULL) //查找信息库中是否有该学生
{
if(strcmp(p->st.name,name)==0) break;
else p=p->pNext ;
}
if(p->st.flag==1)
{
printf("\t\t该生正在上机!\n");
}
else
{
printf("\t\t请输入上机时间(当前时间):");
scanf("%d:%d:%d",&p->st.start.hour,&p->st.start.minute,&p->st.start.second);
p->st.flag=1;

}
}
else
{
printf("\t\t请输入学号:");
gets(num);
while(p!=NULL) //查找信息库中是否有该学生
{
if(strcmp(p->st.name,name)==0) break;
else p=p->pNext ;
}
if(p->st.flag==1)
{
printf("\t\t该生正在上机!\n");
}
else
{
printf("\t\t请输入上机时间(当前时间):");
scanf("%d:%d:%d",&p->st.start.hour,&p->st.start.minute,&p->st.start.second);
p->st.flag=1;

}
}
/*if(p->st.flag==1)
{
printf("\t\t该生正在上机!\n");
return;
}
else
{
//for(k=0;k if(com[k].f==0)
{
com[k].f=1; //该台机器标记为使用
printf("\t\t请输入上机时间(当前时间):");
scanf("%d:%d:%d",&p->st.start.hour,&p->st.start.minute,&p->st.start.second);
p->st.flag=1; //该生标记为上机
com[k].stut=p->st; //记录使用该台机器的学生信息
break;
}
if(k==30)
printf("\t\t机器全部使用中,请稍后再上机!\n");
}*/
}

void calculate(PNODE pHead) //上机时间及费用计算
{
int t;
NODE stu;

PNODE p=pHead->pNext;
struct time timet;
if(p->st.finish.secondst.start.second)
{
if(p->st.finish.minute==0)
{
stu.st.finish.hour=stu.st.finish.hour-1;
stu.st.finish.minute=59;
}
else
stu.st.finish.minute=stu.st.finish.minute-1;
timet.second=stu.st.finish.second+60-stu.st.start.second;
}
else
timet.second=stu.st.finish.second-stu.st.start.second;
if(p->st.finish.minutest.start.minute)
{
stu.st.finish.hour-=1;
timet.minute=stu.st.finish.minute+60-stu.st.start.minute;
}
else
timet.minute=stu.st.finish.minute-stu.st.start.minute;
timet.hour=stu.st.finish.hour-stu.st.start.hour;
if(timet.second==0&&timet.minute==0)
t=timet.hour;
else
t=timet.hour+1; //不满一小时按一小时记
printf("\t\t该生上机用时%d小时,费用为%d元\n",t,t);
}

void offline(PNODE pHead) //下机
{
char num[20],name[20];
int s;
PNODE p=pHead->pNext;
do
{
printf("\t\t使用姓名按1,使用学号按2:");
scanf("%d",&s);
}while(s!=1&&s!=2);
getchar();
if(s==1)
{
printf("\t\t请输入姓名:");
gets(name);
while(NULL!=p)
{
if(strcmp(p->st.name,name)==0)break;
p=p->pNext ;
}
}
else
{
printf("\t\t请输入学号:");
gets(num);
while(NULL!=p)
{
if(strcmp(p->st.num,num)==0)break;
p=p->pNext ;
}
}
if(p->st.flag==0)
{
printf("\t\t该生未上机或已下机!\n");
return;
}
else
{
printf("\t\t请输入下机时间(当前时间):");
scanf("%d:%d:%d",&p->st.finish.hour,&p->st.finish.minute,&p->st.finish.second);
calculate (pHead); //计算并输出上机费用
p->st.flag=0; //该生标记为未上机
for(k=0;k if(strcmp(com[k].stut.num,p->st.num)==0)
{
com[k].f=0; //该台机器标记为未使用
break;
}
}
}

void search(PNODE p) //上机时间查询
{
char num[20],name[20],banji[20];
int s;
p=p->pNext;
do
{
printf("\t\t使用姓名按1,使用学号按2,使用班级按3:");
scanf("%d",&s);
}while(s!=1&&s!=2&&s!=3);
getchar();
if(s==1)
{
printf("\t\t请输入姓名:");
gets(name);
while(NULL!=p)
{
if(strcmp(p->st.name,name)==0)break;
p=p->pNext ;
}
}
if(s==3)
{
printf("\t\t请输入班级:");
gets(banji);
while(NULL!=p)
if(strcmp(p->st.banji,banji)==0)
printf("\t\t该生正在上机,上机起始时间为%d:%d:%d\n",p->st.start.hour,p->st.start.minute, p->st.start.second);
p=p->pNext ;
}
else
{
printf("\t\t请输入学号:");
gets(num);
while(NULL!=p)
{
if(strcmp(p->st.num,num)==0)break;
p=p->pNext ;
}
}
if(p->st.flag==1)
printf("\t\t该生正在上机,上机起始时间为%d:%d:%d\n",p->st.start.hour,p->st.start.minute, p->st.start.second);
else
printf("\t\t该生未上机或已下机!\n"); }

void display() //全部机器使用情况显示
{
printf("\t机器号是否使用 使用者学号 班级上机时间\n"); //显示格式,表头
printf("\t----------------------------------------------------------\n");
for(k=0;k<30;k++)
{
if(com[k].f==0)
printf("\t%02d 否--------:--:--\n",k+1);
else
printf("\t%02d 是%-10s%-10s%2d%02d:%02d:%02d\n",k+1,com[k].stut.name,com[k].stut.num,com[k].stut.banji,com[k].stut.start.hour, com[k].stut.start.minute,com[k].stut.start.second);
}
printf("\t");
system("pause"); //使刚显示的内容在屏幕上停留一段时间,直到继续操作为止
}

int main() //主函数
{
int n=0;
PNODE h; //定义一个指针
for(k=0;k<30;k++) //全部机器标记为未使用
com[k].f=0;
for(;;)
{
switch(mainmenu())
{
case 1:
system("cls");
printf("\t\t\t输入学生信息:\n");
InputStudent(h);
//save();
break;
case 2:
system("cls");
printf("\t\t\t学生上机\n");
online(h);
printf("\t\t");
system("pause");
break;
case 3:
system("cls");
printf("\t\t\t学生下机\n");
offline(h);
printf("\t\t");
system("pause");
break;
case 4:
system("cls");
printf("\t\t\t上机时间查询\n");
search(h);
printf("\t\t");
system("pause");
break;
case 5:
system("cls");
printf("\t\t\t机器使用情况显示\n\n");
display();
break;
case 6:
//save();
break;
case0:
system("cls");
printf("\n\n\t\t感谢使用机房收费管理系统,欢迎下次使用,再见!\n\n");
printf("\t\t");
getchar();
exit(0);
}
}
return 0;
}

  • 写回答

1条回答

  • threenewbee 2016-12-19 16:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)