当前位置:文档之家› c语言程序设计学生管理系统

c语言程序设计学生管理系统

c语言程序设计学生管理系统————————————————————————————————作者:————————————————————————————————日期:/*学生成绩管理系统数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。

要求具有以下功能:(1)添加、删除任意个记录。

(2)修改任意个记录。

(3)显示、保存记录。

(4)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这两个文件的全部记录。

(5)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。

要求:(1)设计一个主函数和多个子函数,每个子函数完成一个相对独立的子功能。

(2)程序运行时,首先进行口令检查,再显示菜单。

并能根据菜单调用相应的函数功能。

口令程序段的功能要求:《1》提示用户输入一个口令。

《2》用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。

《3》可对用户的口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。

*/#include<stdio.h>#include<string.h>#include<stdlib.h>struct student{int num;char name[10];int grade;char major[10];float score_1,score_2,score_3,aver,total;struct student *next;};struct student *creat(void);struct student *add(void);struct student *del(int num);struct student *alter();void save(struct student *head);void read();void totalsort(struct student *head);void aversort(struct student *head);void Bfindsort();int all=0;void main(){int i,n,m,num;char ord[10]="student",ord_1[10];struct student *p;for(i=0;i<=3;i++){if(i==3)exit(0);printf("请第%d次输入进入系统的指令:",i+1);scanf("%s",ord_1);if(strcmp(ord,ord_1)!=0)printf("输入的指令有误请重新输入。

\n");if(strcmp(ord,ord_1)==0)break;}p=NULL;loop_2:printf("输入系统的功能:\n0、建立一个数据库;\n1、添加与保存学生数据;\n2、删除与保存学生数据;\n3、修改与保存学生数据;\n4、显示数据库的记录;\n5、将数据进行排序;\n6、查询指定成绩的人数:");loop: scanf("%d",&n);if(n<0||n>6){printf("\n输入的选择有误请重新输入:");goto loop;}if(n==2){printf("输入删除学生数据的学号:");scanf("%d",&num);}switch(n){case 0:p=creat();save(p);read();break;case 1:p=add();save(p);read();break;case 2:p=del(num);save(p);read();break;case 3:p=alter();save(p);read();break;case 4:read();break;case 5:{printf("输入选择排序的功能1、根据平均成绩;2、根据总成绩:");loop_1: scanf("%d",&m);if(m<1||m>2){printf("\n输入的选择有误请重新输入:");goto loop_1;}switch(m){case 1:aversort(p);break;case 2:totalsort(p);break;}}break;case 6:Bfindsort();break;}loop_5: printf("输入你要进行的步骤:1、返回上一菜单菜单;2、退出程序。

\n");scanf("%d",&n);if(n<1||n>2){printf("输入的选择有误,请重新输入:");goto loop_5;}switch(n){case 1:goto loop_2;break;case 2:break;}}struct student *creat(void){int i,n;struct student *head,*p,*q,*tail;printf("输入学生的个数:");scanf("%d",&n);head=NULL;for(i=0;i<n;i++){all++;p=(struct student*)malloc(sizeof(struct student));if(head==NULL)head=p;elsetail->next=p;tail=p;p->next=NULL;q=head;printf("输入学生的学号、名字、年级、专业、三门成绩:");scanf("%d %s %d %s %f %f %f",&p->num,&p->name,&p->grade,&p->major,&p->score_1, &p->score_2,&p->score_3);loop: while(q->next!=NULL){if(q->num==p->num){printf("输入的学生号错误请重新输入学生学号:");scanf("%d",&p->num);goto loop;}q=q->next;}p->aver=(p->score_1+p->score_2+p->score_3)/3;p->total=p->score_1+p->score_2+p->score_3;}return(head);}void save(struct student *head){struct student *p;FILE *fp;if((fp=fopen("student.txt","wb"))==NULL){printf("打开文件失败。

\n");exit(0);}p=head;while(p!=NULL){fwrite(p,sizeof(struct student),1,fp);p=p->next;}fclose(fp);}struct student *del(int num){int i,n=0;struct student *p,*q,*head;FILE *fp;if(all==0){printf("数据库为空。

\n");head=NULL;return(head);}p=(struct student *)malloc(sizeof(struct student));if((fp=fopen("student.txt","rb"))==NULL){printf("打开student.txt文件失败\n");exit(0);}for(i=0;p!=NULL;i++){p=(struct student *)malloc(sizeof(struct student));fread(p,sizeof(struct student),1,fp);if(i==0)head=p;if(num==p->num){if(p==head)head=p->next;elseq->next=p->next;n++;all--;}q=p;}if(n==0)printf("没有%d这一学生号的学生!\n",num);return(head);}struct student *add(){int i,j,m,n=0;FILE *fp;struct student *p,*q,*temp,*head,*tail;if(all==0){head=NULL;}else{if((fp=fopen("student.txt","rb"))==NULL){printf("打开student.txt文件失败\n");exit(0);}p=(struct student*)malloc(sizeof(struct student));fread(p,sizeof(struct student),1,fp);head=p;tail=p;while(p->next!=NULL){p=(struct student*)malloc(sizeof(struct student));fread(p,sizeof(struct student),1,fp);tail->next=p;tail=p;}tail->next=NULL;fclose(fp);}printf("输入需要输入学生的个数:");scanf("%d",&j);for(i=0;i<j;i++){all++;p=(struct student*)malloc(sizeof(struct student));printf("输入学生的学号、名字、年级、专业、三门成绩:");scanf("%d %s %d %s %f %f %f",&p->num,&p->name,&p->grade,&p->major,&p->score_1, &p->score_2,&p->score_3);temp=head;loop_1: while(temp!=NULL){if(temp->num==p->num){printf("输入的学生号错误请重新输入学生学号:");scanf("%d",&p->num);goto loop_1;}temp=temp->next;}p->aver=(p->score_1+p->score_2+p->score_3)/3;p->total=p->score_1+p->score_2+p->score_3;if(head==NULL){head=p;p->next=NULL;}else{q=head;n=1;while(q->next!=NULL){q=q->next;n++;}printf("该链表一共有节点个数%d。

相关主题