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

上传人:b****2 文档编号:17184773 上传时间:2023-04-24 格式:DOCX 页数:24 大小:18.56KB
下载 相关 举报
c语言程序设计学生管理系统.docx_第1页
第1页 / 共24页
c语言程序设计学生管理系统.docx_第2页
第2页 / 共24页
c语言程序设计学生管理系统.docx_第3页
第3页 / 共24页
c语言程序设计学生管理系统.docx_第4页
第4页 / 共24页
c语言程序设计学生管理系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

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

《c语言程序设计学生管理系统.docx》由会员分享,可在线阅读,更多相关《c语言程序设计学生管理系统.docx(24页珍藏版)》请在冰豆网上搜索。

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

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

/*学生成绩管理系统

数据库的数据项主要数据包括:

学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均

成绩、总成绩。

要求具有以下功能:

(1)添加、删除任意个记录。

(2)修改任意个记录。

(3)显示、保存记录。

(4)排序功能:

打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排

序法将平均成绩和总成绩排序后生成两个新文件(从大到小),

存盘并显示这两个文件的全部记录。

(5)查询功能:

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

要求:

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

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

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

口令程序段的功能要求:

《1》提示用户输入一个口令。

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

《3》可对用户的口令输入进行次数限制(如:

重复输入3次都不对),则自动退出系

统。

*/

#include

#include

#include

structstudent

{

intnum;

charname[10];

intgrade;

charmajor[10];

floatscore_1,score_2,score_3,aver,total;

structstudent*next;

};

structstudent*creat(void);

structstudent*add(void);

structstudent*del(intnum);

structstudent*alter();

voidsave(structstudent*head);

voidread();

voidtotalsort(structstudent*head);

voidaversort(structstudent*head);

voidBfindsort();

intall=0;

voidmain()

{

inti,n,m,num;

charord[10]=student,ord_1[10];

structstudent*p;

for(i=0;i<=3;i++)

{

if(i==3)

exit(0);

牰湩晴尨请第%d次输入进入系统的指令:

i+1);

scanf(%s,ord_1);

if(strcmp(ord,ord_1)!

=0)

牰湩晴尨输入的指令有误请重新输入。

\n);

if(strcmp(ord,ord_1)==0)

break;

}

p=NULL;

潬灯?

瀺楲瑮?

输入系统的功能:

\n0、建立一个数据库;\n1、添加与保存学生数据;\n2、删

除与保存学生数据;\n3、修改与保存学生数据;\n4、显示数据库的记录;\n5、将数据进

行排序;\n6、查询指定成绩的人数:

);

loop:

scanf(%d,&n);

if(n<0||n>6)

{

printf(\

输入的选择有误请重新输入:

);

gotoloop;

}

if(n==2)

{

牰湩晴尨输入删除学生数据的学号:

);

scanf(%d,&num);

}

switch(n)

{

case0:

p=creat();save(p);read();break;

case1:

p=add();save(p);read();break;

case2:

p=del(num);save(p);read();break;

case3:

p=alter();save(p);read();break;

case4:

read();break;

case5:

{

牰湩晴尨输入选择排序的功能1、根据平均成绩;2、根据总成绩:

);

loop_1:

scanf(%d,&m);

if(m<1||m>2)

{

printf(\

输入的选择有误请重新输入:

);

loop_1;goto

}

switch(m)

{

case1:

aversort(p);break;

case2:

totalsort(p);break;

}

}break;

case6:

Bfindsort();break;

}

loop_5:

牰湩晴尨输入你要进行的步骤:

1、返回上一菜单菜单;2、退出程序。

\n);

scanf(%d,&n);

if(n<1||n>2)

{

牰湩晴尨输入的选择有误,请重新输入:

);

gotoloop_5;

}

switch(n)

{

case1:

gotoloop_2;break;

case2:

break;

}

}

structstudent*creat(void)

{

inti,n;

structstudent*head,*p,*q,*tail;

牰湩晴尨输入学生的个数:

);

scanf(%d,&n);

head=NULL;

for(i=0;i

{

all++;

p=(structstudent*)malloc(sizeof(structstudent));

if(head==NULL)

head=p;

else

tail->next=p;

tail=p;

p->next=NULL;

q=head;

牰湩晴尨输入学生的学号、名字、年级、专业、三门成绩:

);

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)

{

牰湩晴尨输入的学生号错误请重新输入学生学号:

);

scanf(%d,&p->num);

gotoloop;

}

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);

}

voidsave(structstudent*head)

{

structstudent*p;

FILE*fp;

if((fp=fopen(student.txt,wb))==NULL)

{

牰湩晴尨打开文件失败。

\n);

exit(0);

}

p=head;

while(p!

=NULL)

{

fwrite(p,sizeof(structstudent),1,fp);

p=p->next;

}

fclose(fp);

}

structstudent*del(intnum)

{

inti,n=0;

structstudent*p,*q,*head;

FILE*fp;

if(all==0).

{

牰湩晴尨数据库为空。

\n);

head=NULL;

return(head);

}

p=(structstudent*)malloc(sizeof(structstudent));

if((fp=fopen(student.txt,

b))==NULL)

{

牰湩晴尨打开student.txt文件失败\n);

exit(0);

}

for(i=0;p!

=NULL;i++)

{

p=(structstudent*)malloc(sizeof(structstudent));

fread(p,sizeof(structstudent),1,fp);

if(i==0)

head=p;

if(num==p->num)

{

if(p==head)

head=p->next;

else

q->next=p->next;

n++;

all--;

}

q=p;

}

if(n==0)

牰湩晴尨没有%d这一学生号的学生!

\n,num);

return(head);

}

structstudent*add()

{

inti,j,m,n=0;

FILE*fp;

structstudent*p,*q,*temp,*head,*tail;

if(all==0)

{

head=NULL;

}

else

{

if((fp=fopen(student.txt,

b))==NULL)

{

牰湩晴尨打开student.txt文件失败\n);

exit(0);

}

p=(structstudent*)malloc(sizeof(structstudent));

fread(p,sizeof(structstudent),1,fp);

head=p;

tail=p;

while(p->next!

=NULL)

{

p=(structstudent*)malloc(sizeof(structstudent));

fread(p,sizeof(structstudent),1,fp);

tail->next=p;

tail=p;

}

tail->next=NULL;

fclose(fp);

}

牰湩晴尨输入需要输入学生的个数:

);

scanf(%d,&j);

for(i=0;i

{

all++;

p=(structstudent*)malloc(sizeof(structstudent));

牰湩晴尨输入学生的学号、名字、年级、专业、三门成绩:

);

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)

{

牰湩晴尨输入的学生号错误请重新输入学生学号:

);

scanf(%d,&p->num);

gotoloop_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++;

}

牰湩晴尨该链表一共有节点个数%d。

\n,n);

牰湩晴尨输入将数据插入第几个节点后面。

\n);loop:

scanf(%d,&m);if(m<0||m>n){输入有误,请重新输入。

\n);牰湩晴尨loop;goto

}q=head;if(m==0){p->next=head;head=p;}else{while((m-1)!

=0){q=q->next;m--;}p->next=q->next;q->next=p;}}}

return(head);

}

structstudent*alter()

{

intm,num,gra,n;

maj[10],name[10];char

floatscore_1,score_2,score_3;

structstudent*p,*q,*head;

FILE*fp;

if(all==0)

{

牰湩晴尨数据库为空。

\n);

head=NULL;

return(head);

}

if((fp=fopen(student.txt,

b))==NULL)

{

牰湩晴尨打开student.txt文件失败\n);

exit(0);

}

p=(structstudent*)malloc(sizeof(structstudent));

fread(p,sizeof(structstudent),1,fp);

head=p;

q=p;

潬灯?

瀺楲瑮?

输入修改学生数据的姓名:

);

scanf(%s,&name);

while(strcmp(name,p->name)!

=0)

{

p=p->next;

if(p==NULL)

{

牰湩晴尨没有该学生。

\n);

return(head);

}

}

loop:

牰湩晴尨请选择修改学生的具体数据:

\n1、学号;2、年级;3、专业;\n4、成绩

1;5、成绩2;6、成绩3:

);

scanf(%d,&m);

if(m<1||m>6)

{

printf(\

输入的选择有误请重新输入:

);

gotoloop;

}

switch(m)

{

case?

牰湩晴尨输入新的学号:

);loop_2:

scanf(%d,&num);

while(q!

=NULL)

{

if(q->num==num)

{

牰湩晴尨输入的学生号错误请重新输入学生学号:

);

gotoloop_2;

}

q=q->next;

}

p->num=num;break;

case?

牰湩晴尨输入新的年级:

);scanf(%d,&gra);p->grade=gra;break;

case?

牰湩晴尨输入新的专业:

);scanf(%s,&maj);strcpy(p->major,maj);break;

case?

牰湩晴尨输入新的成绩:

);scanf(%f,&score_1);p->score_1=score_1;

p->aver=(p-

>score_1+p->score_2+p->score_3)/3;

p->total=p-

>score_1+p->score_2+p->score_3;break;

case?

牰湩晴尨输入新的成绩:

);scanf(%f,&score_2);p->score_2=score_2;

p->aver=(p-

>score_1+p->score_2+p->score_3)/3;

p->total=p-

>score_1+p->score_2+p->score_3;break;

case?

牰湩晴尨输入新的成绩:

);scanf(%f,&score_3);p->score_3=score_3;

p->aver=(p-

>score_1+p->score_2+p->score_3)/3;

p->total=p-

>score_1+p->score_2+p->score_3;break;

}

牰湩晴尨选择你要执行的内容:

\n1、返回上一菜单\n2、返回主菜单\n3、修改另一学生

的数据);

loop_5:

scanf(%d,&n);

if(n<1||n>3)

{

牰湩晴尨输入的选择有误,请重新输入:

);

gotoloop_5;

}

switch(n)

{

case1:

gotoloop;break;

case2:

break;

case3:

gotoloop_1;break;

}

return(head);

}

voidread()

{

structstudent*p,*head;

FILE*fp;

if(all==0)

{

牰湩晴尨系统没有学生数据。

\n);

return;

}

if((fp=fopen(student.txt,

b))==NULL)

{

牰湩晴尨打开文件失败。

\n);

exit(0);

}

p=(structstudent*)malloc(sizeof(structstudent));

fread(p,sizeof(structstudent),1,fp);

head=p;

牰湩晴尨打开student.txt文件的学生数据。

\n);

printf(listnumnamegrademajorscore_1score_2score_3avertotal\n);

while(p!

=NULL)

{

printf(student%-3d%-4s%-5d%-5s%-7.2f%-7.2f%-7.2f%-4.2f%-5.2f\n,

p->num,p->name,p->grade,p->major,p->score_1,p->score_2,p->score_3,p-

>aver,p->total);

p=p->next;

}

fclose(fp);

}

voidaversort(structstudent*head)

{

inttemp;

floattemp_1;

chartemp_2[10];

structstudent*p,*q,*i;

FILE*fp;

p=head;

while(p->next!

=NULL)

{

q=p;

i=p->next;

while(i!

=NULL)

{

if(i->aver>q->aver)

q=i;

i=i->next;

}

if(q!

=p)

{

temp=p->num;p->num=q->num;q->num=temp;

strcpy(temp_2,p->name);strcpy(p->name,q->name);strcpy(q->name,temp_2);

temp=p->grade;p->grade=q->grade;q->grade=temp;

strcpy(temp_2,p->major);strcpy(p->major,q->major);strcpy(q->major,temp_2);

temp_1=p->score_1;p->score_1=q->score_1;q->score_1=temp_1;

temp_1=p->score_2;p->score_2=q->score_2;q->score_2=temp_1;

temp_1=p->score_3;p->score_3=q->score_3;q->score_3=temp_1;

temp_1=p->aver;p->aver=q->aver;q->aver=temp_1;

temp_1=p->total;p->total=q->total;q->total=temp_1;

}

p=p->next;

}

if((fp=fopen(student_1.txt,wb+))==NULL)

{

牰湩晴尨打开student_1.txt文件失败\n);

exit(0);

}

p=head;

while(p!

=NULL)

{

fwrite(p,sizeof(structstudent),1,fp);

p=p->next;

}

p=head;

rewind(fp);

牰湩晴尨读出由平均成绩排序出来的文件student_1.txt。

\n);

printf(listnumnamegrademajorscore_1score_2score_3avertotal\n);

while(p!

=NULL)

{

fread(p,sizeof(structstudent),1,fp);

printf(student%-3d%-4s%-5d%-5s%-7.2f%-7.2f%-7.2f%-4.2f%-5.2f\n,

p->num,p->name,p->grade,p->major,p->score_1,p->score_2,p->score_3,p-

>aver,p->total);

p=p->next;

}

fclose(fp);

}

voidtotalsort(structstudent*head)

{

inttemp;

floattemp_1;

chartemp_2[10];

structstudent*p,*q,*i;

FILE*fp;

p=head;

while(p->next!

=NULL)

{

q=p;

i=p->next;

while(i!

=NULL)

{

if(i->total>q->total)

q=i;

i=i->next;

}

if(q!

=p)

{

temp=p->num;p->num=q->num;q->num=temp;

strcpy(temp_2,p->name);strcpy(p->name,q->name);strcpy(q->name,temp_2);

temp=p->grade;p->grade=q->grade;q->grade=temp;

strcpy(temp_2,p->major);strcpy(p->major,q->major);strcpy(q->major,temp_2);

temp_1=p->score_1;p->score_1=q->score_1;q->score_1=temp_1;

temp_1=p->score_2;p->score_2=q->score_2;q->score_2=temp_1;

temp_1=p->score_3;p->score_3=q->score_3;q->score_3=temp_1;

temp_1=p->aver;p->aver=q->aver;q->aver=temp_1;

temp_1=p->total;p->total=q->total;q->total=temp_1;

}

p=p->next;

}

if((fp=fopen(student_1.txt,wb+))==NULL)

{

牰湩晴尨打开student_1.txt文件失败\n);

exit(0);

}

p=head;

while(p!

=NULL)

{

fw

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1