1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言链表成绩管理系统排序 【C项目】 文件 结构体 链表 排序 学生信息管理系统...

c语言链表成绩管理系统排序 【C项目】 文件 结构体 链表 排序 学生信息管理系统...

时间:2021-05-16 19:12:56

相关推荐

c语言链表成绩管理系统排序 【C项目】 文件 结构体 链表 排序  学生信息管理系统...

1、密码登录;

2、通过键盘输入学生信息,包括学生学号、姓名、成绩;

3、将输入的信息保存到指定文件中;

4、从文件中读取学生信息;

5、显示全部学生信息;

6、按学生总分进行降序排序;

7、删除学生信息;

8、查找学生信息,可以通过学号查找,也可以通过姓名查找;

9、统计学生信息,统计出最高分和学生人数;

10、退出系统;

源代码:chunli@Linux:~$catmain.c

#include

#include

#include

structstudent

{

charnum[9];

charname[9];

intscorem;

intscoree;

intscorec;

intsum;

structstudent*next;

};

structstudent*creat(structstudent*p)//创建链表

{

structstudent*p1=NULL;

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

p->next=p1;

p1->next=NULL;

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

printf("学号:");scanf("%s",p1->num);

printf("姓名:");scanf("%s",p1->name);

printf("数学成绩:");scanf("%d",&p1->scorem);

printf("英语成绩:");scanf("%d",&p1->scoree);

printf("C语言成绩:");scanf("%d",&p1->scorec);

p1->sum=0;

p1->sum=p1->scorem+p1->scorec+p1->scoree;

printf("总分:%d",p1->sum);

returnp1;

}

voidsave1(structstudent*p)//将链表从内存保存到文件中

{

FILE*fp;

if((fp=fopen("student_system.txt","ab+"))==NULL)

printf("创建失败!\n");

while(p!=NULL)

{

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

p=p->next;

}

fclose(fp);

printf("保存成功!\n");

}

voidsave2(structstudent*p)//将以变动的链表信息存入到文件中

{

FILE*fp;

if((fp=fopen("student_system.txt","wb"))==NULL)

printf("创建失败!\n");

while(p!=NULL)

{

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

p=p->next;

}

fclose(fp);

}

structstudent*read()//把文件中的数据读到链表中

{

FILE*fp;

structstudent*head=NULL,*p1=NULL,*p2=NULL;

if((fp=fopen("student_system.txt","rb+"))==NULL)

{

printf("读取时,文件打开失败!\n");

returnNULL;

}

head=p1=(structstudent*)malloc(sizeof(structstudent));

while(fp!=NULL)

{

if(fread(p1,sizeof(structstudent),1,fp)!=1)break;

p1->next=(structstudent*)malloc(sizeof(structstudent));

p2=p1;

p1=p1->next;

}

p2->next=NULL;

fclose(fp);

returnhead;

}

structstudent*input()//添加函数

{

charch;

structstudent*p=NULL,*head=NULL;

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

p->next=NULL;

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

printf("学号:");scanf("%s",p->num);

printf("姓名:");scanf("%s",p->name);

printf("数学成绩:");scanf("%d",&p->scorem);

printf("英语成绩:");scanf("%d",&p->scoree);

printf("C语言成绩:");scanf("%d",&p->scorec);

p->sum=0;

p->sum=p->scorem+p->scorec+p->scoree;

printf("总分:%d",p->sum);

for(;;)

{

printf("\n是否继续输入学生信息?(y/n):\n");

getchar();

ch=getchar();

if(ch=='y'||ch=='Y')

p=creat(p);

elseif(ch=='n'||ch=='N')

{

save1(head);

break;

}

else

printf("您的输入有误,请重新输入,");

}

returnp->next;

}

structstudent*output()//输出函数,查看全部学生信息

{

structstudent*p;

p=read();

if(read==NULL)

exit(1);

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

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

printf("|学号|姓名|数学|英语|C语言|总分|\n");

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

while(p!=NULL)

{

p->sum=0;

p->sum=p->scorem+p->scoree+p->scorec;

printf("|%4s|%-4s|%3d|%3d|%3d|%3d|\n",p->num,

p->name,p->scorem,p->scoree,p->scorec,p->sum);

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

p=p->next;

}

returnp;

}

structstudent*search()//查找函数

{

intn;

chara[9],b[9];

structstudent*p=NULL,*head=NULL;

printf("请您选择要查找的方式:1按姓名2按学号\n");

scanf("%d",&n);

if(n==1)

{

printf("请输入您要查找的学生的姓名:\n");

scanf("%s",a);

p=head=read();

while(p!=NULL)

{

if(p==NULL)

{

printf("对不起,没有您要找的人。\n");

}

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

{

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

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

printf("|学号|姓名|数学|英语|C语言|总分|\n");

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

printf("|%4s|%-4s|%3d|%3d|%3d|%3d|\n",p->num,

p->name,p->scorem,p->scoree,p->scorec,p->sum);

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

break;

}

p=p->next;

}

}

if(n==2)

{

printf("请输入您要查找的学生的学号:\n");

scanf("%s",b);

p=head=read();

while(p!=NULL)

{

if(p==NULL)

{

printf("对不起,没有您要找的人。\n");

}

if(strcmp(p->num,b)==0)

{

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

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

printf("|学号|姓名|数学|英语|C语言|总分|\n");

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

printf("|%4s|%-4s|%3d|%3d|%3d|%3d|\n",p->num,

p->name,p->scorem,p->scoree,p->scorec,p->sum);

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

break;

}

p=p->next;

}

}

returnhead;

}

structstudent*dele()//删除函数

{

structstudent*p1=NULL,*p2=NULL,*head=NULL;

chara[9];

output();

printf("请输入需要删除信息的人的姓名:\n");

scanf("%s",a);

p1=head=read();

if(head==NULL)

{

printf("对不起,暂时没有信息,无法删除。\n");

}

while(head!=NULL)

{

if(strcmp(a,head->name)!=0&&p1->next!=NULL)

{

p2=head;

head=head->next;

if(head==NULL)break;

}

if(strcmp(a,head->name)==0&&p1==head)

{

p1=head->next;

}

if(strcmp(a,head->name)==0)

{

p2->next=head->next;

save2(p1);

printf("该学生的信息删除成功!");

break;

}

}

if(head==NULL)

printf("对不起,没有该学生的信息。\n");

returnhead;

}

structstudent*change()//修改函数

{

inta;

charx[9];

structstudent*p=NULL,*head=NULL,*q=NULL;

output();

p=head=read();

printf("请输入要修改的人的姓名:\n");

scanf("%s",x);

if(p==NULL)

{

printf("没有这个人!\n");

exit(1);

}

while(p!=NULL)

{

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

{

q=p;

break;

}

p=p->next;

}

if(p!=NULL)

{

printf("请选择修改的内容:\n");

printf("1.姓名\n");

printf("2.学号\n");

printf("3.数学成绩\n");

printf("4.英语成绩\n");

printf("5.C成绩\n");

do

{

scanf("%d",&a);

if(a6)

printf("您输入的数字有误,请重新输入:\n");

}while(a<=0||a>=6);

switch(a)

{

case1:printf("请输入更改后的姓名:\n");scanf("%s",p->name);break;

case2:printf("请输入更改后的学号:\n");scanf("%s",p->num);break;

case3:printf("请输入更改后的数学成绩:\n");scanf("%d",&p->scorem);break;

case4:printf("请输入更改后的英语成绩:\n");scanf("%d",&p->scoree);break;

case5:printf("请输入更改后的C成绩:\n");scanf("%d",&p->scorec);break;

}

p->sum=0;

p->sum=p->scorem+p->scoree+p->scorec;

printf("更改后的总分:%d",p->sum);

save2(head);

output();

}

if(p==NULL)

{

printf("对不起,没有这个人。\n");

}

returnhead;

}

structstudent*sortsum(structstudent*head)//排序函数

{

structstudent*p,*p1,*p2,*p3;

structstudentm,n;

if(head==NULL)returnNULL;

m.next=head;

p=&m;

while(p->next!=NULL)

{

p=p->next;

}

p=p->next=&n;

while(p!=m.next)

{

p3=&m;

p1=p3->next;

p2=p1->next;

while(p2!=p)

{

if((p1->sum)sum))

{

p1->next=p2->next;

p2->next=p1;

p3->next=p2;

p3=p2;

p2=p1->next;

}

else

{

p3=p1;

p1=p2;

p2=p2->next;

}

}

p=p1;

}

while(p->next!=&n)

{

p=p->next;

}

p->next=NULL;

returnm.next;

}

structstudent*outputsortsum()//总分排序输出

{

inti=0;

structstudent*head=NULL,*p=NULL;

head=read();

p=sortsum(head);

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

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

printf("|名次|学号|姓名|数学|英语|C语言|总分|\n");

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

while(p!=NULL)

{

i++;

printf("|%3d|%4s|%-4s|%3d|%3d|%3d|%3d|\n",i,p->num,

p->name,p->scorem,p->scoree,p->scorec,p->sum);

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

p=p->next;

}

returnhead;

}

structstudent*statistic()//统计函数

{

intm=0;

structstudent*head=NULL;

structstudent*p,*q;

p=head=read();

while(p!=NULL)

{

m++;

p=p->next;

}

printf("总共有%d个学生信息.\n\n",m);

q=sortsum(head);

printf("分数最高的学生的信息:\n");

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

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

printf("|学号|姓名|数学|英语|C语言|总分|\n");

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

printf("|%4s|%-4s|%3d|%3d|%3d|%3d|\n",q->num,

q->name,q->scorem,q->scoree,q->scorec,q->sum);

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

returnhead;

}

voidlogin1()

{

while(1)

{

inta=1;

inti;

charch[10];

charnum[20]={"abcde"};

printf("进入管理员成绩管理系统之前请先输入密码\n");

printf("请输入您的密码:");

scanf("%s",ch);

if(strcmp(num,ch)==0)

{

a=0;

}

if(a!=0)

{

printf("\n这个密码是错误的!");

printf("\n请输入正确的密码:");

}

else

{

break;

}

}

}

voidlogin2()

{

while(1)

{

inta=1;

inti;

charch[10];

charnum[20]={"12345"};

printf("进入学生成绩管理系统之前请先输入密码\n");

printf("请输入您的密码:");

scanf("%s",ch);

if(strcmp(num,ch)==0)

a=0;

if(a==0)

{

printf("\n欢迎进入学生成绩管理系统!\n");

getchar();

break;

}

else

{

printf("\n这个密码是错误的!");

printf("\n请输入正确的密码:");

}

}

}

voidmenu1()

{

system("clear");

printf("欢迎进入管理员管理系统!\n");

printf("*******************************主菜单****************************\n");

printf("*1添加学生成绩*\n");

printf("*2查找学生成绩*\n");

printf("*3删除指定学生*\n");

printf("*4修改学生信息*\n");

printf("*5总分排序信息*\n");

printf("*6查看全部信息*\n");

printf("*7统计学生人数*\n");

printf("*8停止程序运行*\n");

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

}

voidmenu2()

{

system("clear");

printf("欢迎进入学生管理系统!\n");

printf("*******************************主菜单****************************\n");

printf("*1查找学生成绩*\n");

printf("*2总分排序信息*\n");

printf("*3查看全部信息*\n");

printf("*4统计学生人数*\n");

printf("*5停止程序运行*\n");

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

}

voidmain()

{

inta,m;

intb=1;

system("clear");

printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");

printf("教务管理系统欢迎您!\n");

printf("请选择您要进入的管理系统\n");

printf("1.管理员管理系统。\n");

printf("2.学生管理系统。\n");

printf("3.退出系统!\n");

printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");

printf("请您选择:");

scanf("%d",&m);

if(m==1){login1();}

if(m==2){login2();}

while(b==1)

{

if(m==1)

{

menu1();

scanf("%d",&a);

switch(a)

{

case1:input();break;

case2:search();break;

case3:dele();break;

case4:change();break;

case5:outputsortsum();break;

case6:output();break;

case7:statistic();break;

case8:exit(1);

default:printf("输入错误!\n");break;

}

printf("\n\n请选择接下来的操作:\n");

printf("1.返回主菜单2.退出程序\n");

scanf("%d",&b);

}

if(m==2)

{

menu2();

scanf("%d",&a);

switch(a)

{

case1:search();break;

case2:outputsortsum();break;

case3:output();break;

case4:statistic();break;

case5:exit(1);

default:printf("输入错误!\n");break;

}

printf("\n\n请选择接下来的操作:\n");

printf("1.返回主菜单2.退出程序\n");

scanf("%d",&b);

}

if(m==3)

exit(1);

}

}

chunli@Linux:~$

编译运行:chunli@Linux:~$gccmain.c&&./a.out

★★★★★★★★★★★★★★★★★★★★★★★★★★★

教务管理系统欢迎您!

请选择您要进入的管理系统

1.管理员管理系统。

2.学生管理系统。

3.退出系统!

★★★★★★★★★★★★★★★★★★★★★★★★★★★

请您选择:1

进入管理员成绩管理系统之前请先输入密码

请输入您的密码:abcde

欢迎进入管理员管理系统!

*******************************主菜单****************************

*1添加学生成绩*

*2查找学生成绩*

*3删除指定学生*

*4修改学生信息*

*5总分排序信息*

*6查看全部信息*

*7统计学生人数*

*8停止程序运行*

*****************************************************************

6

*************************STUDENT***********************

-------------------------------------------------------

|学号|姓名|数学|英语|C语言|总分|

-------------------------------------------------------

|1|lucy|12|32|0|44|

-------------------------------------------------------

|45|34|354|343|4234|4931|

-------------------------------------------------------

请选择接下来的操作:

1.返回主菜单2.退出程序

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。