c语言 调试系统,学生管理系统求修调试,C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#define N 3

//数据结构

typedef struct learn

{ //成绩结构

int score[N]; //各门课成绩

int sum; //总分

float ave; //平均分

int order; //名次

}Learn;

typedef struct student

{ //学生结构体

char no[10]; //学号

char name[20]; //姓名

char sex; //性别

int age; //年龄

Learn success; //成绩

struct student*next; //只想后继结点的指针

}Student;

Student*initlist()

{

Student*head;

head=(Student*)malloc(sizeof(Student));

head->next=NULL;

return head;

}

void menushow();

void menuselect(Student*head,int k);

void inputstuinfo(Student*head);

void readfromfile(Student*head);

Student*searchbyno(Student*head,char*no);

int searchbyname(Student*head,char*name);

void compute(Student*head);

void sort(Student *head);

void insertnode(Student *head);

void modifystuinfo(Student *head);

void deletenode(Student *head);

void printfstuinfo(Student *head);

void printsinglestu(Student *p);

void savetofile(Student *head,char *filename);

void copy();

//菜单显示

void menushow()

{

printf("\n\t***************学生成绩管理系统***************\n");

printf("\n\t\t0.帮助");

printf("\n\t\t-----------------");

printf("\n\t\t1.键盘输入\t\t2.文件读取");

printf("\n\t\t-----------------");

printf("\n\t\t3.按学号查找\t\t4.按姓名查找");

printf("\n\t\t5.统计总分平均分\t6.按总分排序");

printf("\n\t\t-----------------");

printf("\n\t\t7.插入数据\t\t8.修改数据");

printf("\n\t\t9.删除数据");

printf("\n\t\t-----------------");

printf("\n\t\t10.数据显示");

printf("\n\t\t11.保存数据\t\t12.文件备份");

printf("\n\t\t-----------------");

printf("\n\t\t13.销毁链表\t\t14.退出系统\n");

printf("\n\t\t*********************************************");

}

//菜单选择

void menuselect(Student*head,int k)

{

int flag=0;

Student*p;

char no[10],name[20];

switch(k)

{

case 0:help();break;

case 1:inputstuinfo(head);break;

case 2:readfromfile(head);printf("文件读取成功!\n");break;

case 3:printf("请输入要查找的学号:");

gets(no);flushall();

p=searchbyno(head,no);

if(p)

{

printsinglestu(p);

}

else

{

printf("未找到!\n");

}

break;

case 4:printf("请输入要查找的姓名:");

gets(name);flushall();

flag=searchbyname(head,name);

if(!flag)

{

printf("未找到!\n");

}

break;

case 5:compute(head);printf("总分平均分统计完毕。\n");break;

case 6:sort(head);printf("排序结束。\n");break;

case 7:insertnode(head);printf("插入完毕。\n");break;

case 8:modifystuinfo(head);printf("修改完毕。\n");break;

case 9:deletenode(head);printf("删除完毕。\n");break;

case 10:printstuinfo(head);break;

case 11:savetofile(head,"stuinfo.dat");printf("文件已保存。\n");break;

case 12:copy();printf("文件备份结束。\n");break;

case 13:destorylist(head);printf("链表已销毁。\n");break;

case 14:printf("欢迎再次使用,再见!\n");exit(0);

}

}

//主函数

int main()

{

Student*head;

int k,flag;

head=initlist(); //初始化单链表

while(1)

{

system("cls");

flag=1;

menushow(); //显示菜单

printf("请根据菜单选择所需操作:");

while(flag)

{

scanf("%d",&k);

flushall(); //清空缓冲区

if(k<0||k>14)

{

printf("输入错,请重新输入\n");

}

else

{

flag=0;

}

}

menuselect(head,k);

printf("按任意键继续!");

getch();

flushall();

}

return 0;

}

void inputstuinfo(Student*head)//数据输入

{

Student *r,*s,*p;

char ch;

int f=1;

r=head;

system("cls");

do

{

flushall();

s=(Student*)malloc(sizeof(Student));

printf("请输入要插入学生的信息\n");

printf("请输入学生的学号:");

gets(s->no);

while(f&&head->next!=NULL)

{

p=seachbyno(head,s->no);

if(p=NULL)

{

break;

}

else

{

printf("该学号已存在,请重新输入\n");

printf("请重新输入学生的学号:");

gets(s->no);

}

}

printf("请输入学生的姓名:");

gets(s->name);

printf("请输入学生的性别:");

s->sex=getchar();

printf("请输入学生的年龄:");

scanf("%d",&s->age);

printf("请输入学生的三门课程成绩:");

scanf("%d",&s->success.score[0]);

scanf("%d",&s->success.score[1]);

scanf("%d",&s->success.score[2]);

scanf("%d",&s->success.score[0]);

s->success.sum=0;

s->success.ave=0;

s->success.order=0;

s->next=NULL;

r->next=s; //尾插法

r=s;

flushall();

printf("是否继续输入学生记录(Y/N):");

ch=getchar();

}while(ch=='Y'||ch=='y');

}

//文件读取学生信息

void readfromfile(Student*head)

{

FILE*fp;

Student stu,*p,*q;

p=head;

if((fp=fopen("stuinfo.dat","rb"))==NULL)

{

printf("不能打开文件\n");

return;

}

fred(&stu,sizeof(stu),1,fp);

while(!feof(fp))

{

q=(Student*)malloc(sizeof(Student));

*q=stu;

q->next=NULL;

p->next=q;

p=q;

fread(&stu,sizeof(stu),1,fp);

}

fclose(fp);

}

//数据统计

Student*searchbyno(Student*head,char*no)

{

Student*p; //移动指针

p=head->next;

while(p!=NULL&&strcmp(p->no,no))

p=p->next; //移动指针,指向下一结点

return p;

}

//按照姓名查找记录

int searchbyname(Student*head,char*name)

{

Student*p;

int flag=0;

system("cls");

p=head;

while(p->next!=NULL)

{

p=p->next;

if(strcmp(p->name,name)==0)

{

flag=1; //查找成功

printsinglestu(p); //输出学生信息

}

}

return flag;

}

//计算总分和平均分

void compute(Student*head)

{

Student*p;

int i;

p=head->next;

while(p!=NULL)

{

p->success.sum=0;

for(i=0;i

{

p->success.sum+=p-success.score[i];

}

p->success.ave=(float)p->success.sum/n;

p=p->next;

}

printstuinfo(head); //显示所有学生信息

savetofile(head,"stuinfo.dat"); //保存信息至文件

}

void sort(Student *head)

{

int i=0;

Student *p,*q,*t,*h,h1;

if(head->next==NULL)

{

printf("空表\n\n");

return;

}

h1=head->next->next;

head->next->next=NULL;

while(h!=NULL)

{

t=h1;

h1=h1->next;

p=h1->next;

q=h1->next;

while(p!=NULL&&t->success.sumsuccess.sum)//进行总分比较

{

q=p;

p=->next;

}

if(p==q)

{

t->next=p;

head->next=t;

}

else

{

t->next=p;

q->next=t;

}

}

p=head;

while(p->next!=NULL)

{

i++;

p=p->next;

p->sucess.order=i;

}

printf("排序成功!\n");

printstuinfo(head);

savetofile(head,"stuinfosort.dat");

}

void insertnode(Student *head)

{

char no[10];

Student *p,*q,*r;

int f=1;

q=(Student *)malloc(sizeof(Student));

printf("请输入要插入的学生的信息\n");

printf("请输入学生的学号:");

gets(q->no);

while(f&&head->next!=NULL)

{

r=searchbyno(head,q->no);

if(r==NULL)

{

break;

}

else

{

printf("该学号已经存在,请重新输入\n");

printf("请重新输入学生的学号:");

gets(q->no);

}

}

printf("请输入学生的姓名:");

gets(q->name);

printf("请输入学生的性别:");

q->sex=getchar();

printf("请输入学生的年龄:");

scanf("%d",&q->age);

printf("请输入学生的三门课程成绩:");

scanf("%d",&q->success.socre[0]);

scanf("%d",&q->success.socre[1]);

scanf("%d",&q->success.socre[2]);

q->success.sum=0;

q->success.ave=0.0;

q->success.order=0;

flushall();

printf("请输入该学生信息插入的位置(插入该学号之后)");

gets(no);

if(p==NULL)

{

printf("没有找到需要插入的位置,新学生信息自动插入到最后!\n");

p=head;

while(p-next!=NULL)

{

p=p->next;

}

q->next=NULL;

p->next=q;

}

else

{

q->next=p->next;

p->next=q;

}

//手动保存或者自动保存savetofile(head,"stuinfo.dat");

}

void modifystuinfo(Student *head)

{

char no[10];

Student *p;

int i;

system("cls");

printf("请输入要修改学生信息的学号:");

gets(no);

p=searchbyno(head,no);

if(p==NULL)

{

printf("没有找到该学生!\n");

}

else

{

printf("学号\t姓名\t性别\t年龄\t课程成绩\n");

printf("%s\t%s\t%c\t%d\t%3d%3d%3d\n",p->no,p->name,p->sex,p->age,p->success.socre[0],p->success.score[1],p->success.socre[2]);

printf("请输入修改后的学生信息:\n");

printf("请输入学生的姓名:");

gets(p->name);

printf("请输入学生的性别:");

p-sex=getchar();

printf("请输入学生的年龄:");

scanf("%d",&p->age);

printf("请输入学生的三门课程成绩:");

scanf("%d",&q->success.socre[0]);

scanf("%d",&q->success.socre[1]);

scanf("%d",&q->success.socre[2]);

for(i=0;i

{//重新计算总分与平均分

p-success.sum=p->success.score[i];

}

p->success.ave=(float)p->success.sum/N;

}

//手动或自动保存 savetofile(head,"stuinfo.dat");

}

void deletenode(Student *head)

{

char no[10];

Student *p,*q;

system("cls");

printf("请输入要删除学生信息的学号:");

gets(no);

q=head

while(q-next&&strcmp(q->next->no,no)!=0)

{

q=q->next;

}

if(q==NULL)

{

printf("没有找到该学生!\n");

}

else

{

p=q->next;

q->next=p->next;

free(p);

}

}

void printfstuinfo(Student *head)

{

Student *p;

p=head->next;

system("cls");

if(p==NULL)

{

printf("没有记录!");

}

else

{

printf("学号\t姓名\t性别\t年龄\t课程成绩\t总成绩\t平均成绩\t名次\n");

while(p!=NULL)

{

printf("%s\t%s\t%c\t%d\t%3d%3d%3d\t%d\t%8.2f\t%d\n",p->no,p-name,p-sex,p->age,p->success.socre[0],p->success.score[1],p->success.socre[2],p->success.sum,p->success.ave,p->success.order);

p=p->next;

}

}

}

void printsinglestu(Student *p)

{

printf("学号\t姓名\t性别\t年龄\t课程成绩\t总成绩\t平均成绩\t名次\n");

printf("%s\t%s\t%c\t%d\t%3d%3d%3d\t%d\t%8.2f\t%d\n",p->no,p-name,p-sex,p->age,p->success.socre[0],p->success.score[1],p->success.socre[2],p->success.sum,p->success.ave,p->success.order);

void savetofile(Student *head,char *filename)

{

FILE *fp;

Student stu,*p;

p=head->next;

if((fp=fopen(filename,"wb"))==NULL

{

printf("不能打开文件\n");

return;

}

do

{

stu=*p

fwrite(&stu,sizeof(stu),1,fp);

p=p->next;

}while(p);

fclose(fp);

}

void copy()

{

FILE *fp1,*fp2;

Student stu;

if(fp1=fopen("stuinfo.dat,"rb"))==NULL)

{

printf("不能打开文件\n");

return;

}

if((fp2=fopen("stuinfocopy.dat,"wb"))==NULL)

{

printf("不能打开文件\n");

return;

}

fread(&stu,sizeof(stu),1,fp1);

while(!feof(fp1))

{

fread(&stu,sizeof(stu),1,fp2);

fread(&stu,sizeof(stu),1,fp1);

}

fclose(fp1);

fclose(fp2);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值