1、密码登录;
2、通过键盘输入学生信息,包括学生学号、姓名、成绩;
3、将输入的信息保存到指定文件中;
4、从文件中读取学生信息;
5、显示全部学生信息;
6、按学生总分进行降序排序;
7、删除学生信息;
8、查找学生信息,可以通过学号查找,也可以通过姓名查找;
9、统计学生信息,统计出最高分和学生人数;
10、退出系统;
源代码:[emailprotected]:~$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);
}
}
[emailprotected]:~$
编译运行:[emailprotected]:~$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.退出程序
学生考勤日期链表排序c语言 【C项目】 文件 结构体 链表 排序 学生信息管理系统(示例代码)...