该学生成绩管理系统为我大一的一次课设,只是用结构体和链表实现了,“增删查改”功能,后续修改时我又加入了按学生总分进行链表排序和保存简单的txt文件。
首先介绍我建立的结构体,它可以储存学号,学生姓名,各科成绩和总成绩,并定义了,新类型stu。
typedef struct student
{
char xuehao[1000];//学号
char name[20];//姓名
char Class[20];//班级
float mathgrade;//数学成绩
float eglishgrade;//英语成绩
float computeregrade;//计算机成绩
float pingjun;//平均成绩
float zong;//总分
struct student *next;
} stu;
stu *head;
下面是主函数,包括一个简易的登录界面,并进入初始化界面(函数)
int main()
{
head = (stu*)malloc(sizeof(stu));
head->next=NULL;
char zhanghao1[20] = "a"/*储存注册账号*/,zhanghao2[20]/*储存登录账号*/;
char mima1[20]="a"/*储存注册密码*/,mima2[20]/*储存登录密码*/;
int j;
for(int i=0;i!=1;)
{
printf("\t\t****************************\n");
printf("\t\t******学生成绩管理系统******\n");
printf("\t\t****************************\n");
printf("\t\t请选择\n\t\t1.登录\n\t\t2.注册\n\t\t");
char a[100];
scanf("%s",a);
if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")==0 && strcmp(mima1,"a")==0)//建立了一个简陋的注册登录界面
{
printf("\t\t请先注册账号\n");
printf("\t\t请输入需要创建的账号;");
scanf("%s",zhanghao1);
printf("\t\t请输入需要注册的密码:");
scanf("%s",mima1);
system("pause");
system("cls");
continue;
}else if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")!=0 && strcmp(mima1,"a")!=0)
{
printf("\t\t请输入登录账号:");
scanf("%s",zhanghao2);
printf("\t\t请输入登录密码:");
scanf("%s",mima2);
for(;;)
{
if(strcmp(zhanghao1,zhanghao2)!=0 || strcmp(mima1,mima2)!=0)
{
printf("\t\t账号密码错误\n\t\t请重新输入账号:");
scanf("%s",zhanghao2);
printf("\t\t请重新输入密码:");
scanf("%s",mima2);
j++;
if(j==3)
{
break;
}
}
else
{
printf("成功登录\n");
i=1;
break;
}
}
}else if(strcmp(a,"2")==0)
{
printf("\t\t请输入账号:");
scanf("%s",zhanghao1);
printf("\t\t请输入密码:");
scanf("%s",mima1);
system("pause");
system("cls");
continue;
}else
{
printf("\t\t请输入1或2");
system("pause");
system("cls");
continue;
}
if(j==3)
{
printf("\t\t输入错误次数过多");
break;
}
chushi();
if (tui == 1) {
break;
}
system("pause");
system("cls");
}
return 0;
}
初始化函数,创建初始化界面,并利用switch选择结构进入其他功能函数。
void chushi()//初始化界面
{
system("pause");
system("cls");
void pai(stu *head);
void baocun(stu*head);
while (1)
{
printf("\t\t****************************\n");
printf("\t\t******学生成绩管理系统******\n");
printf("\t\t****************************\n");
printf("\t\t 1、新增学生成绩信息并保存\n");
printf("\t\t 2、显示所有学生成绩信息\n");
printf("\t\t 3、查询学生成绩信息\n");
printf("\t\t 4、修改学生成绩信息\n");
printf("\t\t 5、删除学生成绩信息\n");
printf("\t\t 6、按照学生总成绩排序\n");
printf("\t\t 7、生成text文件保存\n");
printf("\t\t 0、退出系统\n");
printf("\t\t 请输入你的选择:");
int a,b;
b=scanf("%d",&a);
while(b!=1)
{
while((getchar())!='\n')
{
printf("警告:只能输入数字");
}
b = scanf("%d",&a);
}
system("cls");
switch(a)//利用switch选择结构
{
case 1:
zeng(head);
break;
case 2:
xianshi(head);
break;
case 3:
find(head);
break;
case 4:
chance(head);
break;
case 5:
cancel(head);
break;
case 6:
pai(head);
break;
case 7:
baocun(head);
break;
case 0:
tui = 1;
printf("感谢你使用学生通信录管理系统,请关掉程序!!!\n");
break;
}
if(tui==1)
{
break;
}
}
}
下面是功能函数我就不做过多的赘述大家自己看即可:
链表增函数:
void zeng(stu*head)//增加学生成绩信息
{
while (1)
{
stu *p, *tail, *q;
tail = head;
while (tail->next != NULL) { //尾插法
tail = tail -> next;
}
q = head->next;
int a = 0;
char xuehao1[20];
printf("请输入学生号\n");
scanf("%s",xuehao1);
while(q != NULL)
{
if(strcmp(q->xuehao,xuehao1) == 0)//判断是否输入重复学号
{
a=1;
printf("学号无法重复请输入\n");
break;
}else
{
q=q->next;
}
}
if(a==1)
{
continue;
}
p=(stu*)malloc(sizeof(stu));//为新结构体申请空间
strcpy(p->xuehao,xuehao1);//复制学号到结构体中
printf("请输入姓名");
scanf("%s",p->name);
printf("请输入班级");
scanf("%s",p->Class);
float mathgrade1,eglishgrade1,computeregrade1,pingjun1;
int j;
printf("请输入数学成绩:");
while (1)//该循环为防止输入错误类型和小于1大于100的分数
{
j=scanf("%f",&mathgrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(mathgrade1<=100 && mathgrade1>=1)
{
p->mathgrade=mathgrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入英语成绩:");
while (1)
{
j=scanf("%f",&eglishgrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(eglishgrade1<=100 && eglishgrade1>=1)
{
p->eglishgrade=eglishgrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入计算机成绩:");
while (1)
{
j=scanf("%f",&computeregrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(computeregrade1<=100 && computeregrade1>=1)
{
p->computeregrade=computeregrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
pingjun1=(mathgrade1+eglishgrade1+computeregrade1)/3.0;//计算平均成绩
printf("平均成绩:%.2f\n",pingjun1);
p->pingjun=pingjun1;
p->zong=mathgrade1+eglishgrade1+computeregrade1;
printf("总分:%.2f",p->zong);
p->next=NULL;//使新创建的结构体指向空
tail->next=p;//使新结构体与链表链接(尾插法)
int i;
printf("是否继续添加\n添加输入1结束输入0\n");
while (1) {
scanf("%d", &i);
if (i == 1 || i == 0)
{
break;
} else {
printf("请输入1或0\n");
continue;
}
}
if (i == 0)
{
system("pause");//暂停
system("cls");//返回
break;
}
}
}
删除函数:
void cancel(stu*head)//删除学生信息
{
stu *p1=NULL,*p2=NULL;//申请结构体指针
p1=head;//初始化
p2=head->next;//初始化
printf("请输入需要删除的学号:");
char xuehao1[1000];
scanf("%s",xuehao1);//存入输入的学号
int a=0;
while(p2 != NULL)
{
if(strcmp(xuehao1,p2->xuehao)==0)//寻找需要删除的部分
{
p1->next=p2->next;
free(p2);
a=1;
break;
}
p1=p2;
p2=p2->next;
}
if(a==1)
{
printf("删除成功");
}else
{
printf("没有找到这个学生,删除失败\n");
}
system("pause");
system("cls");
}
查找函数:
void find(stu*head)//查找需要的学生信息
{
stu *p1=NULL;
int a=0;
char xuehao2[1000];
p1=head->next;
printf("请输入需要查找的学号:");
scanf("%s",xuehao2);
while(p1 != NULL)
{
if(strcmp(xuehao2,p1->xuehao)==0)
{
printf("学号:%s\n",p1->xuehao);
printf("姓名:%s\n",p1->name);
printf("班级:%s\n",p1->Class);
printf("数学成绩:%.2f\n",p1->mathgrade);
printf("英语成绩:%.2f\n",p1->eglishgrade);
printf("计算机成绩:%.2f\n",p1->computeregrade);
printf("平均成绩:%.2f\n",p1->pingjun);
printf("总分:%.2f\n",p1->zong);
system("pause");
system("cls");
a=1;
break;
}
p1=p1->next;
}
if(a==0)
{
printf("查无此人\n");
system("pause");
system("cls");
}
}
修改函数
void change(stu*head)//更换学生信息
{
while(1)
{
stu *p1=NULL,*p2=NULL;
int a=0;
p1=head->next;
p2=head->next;
int b=1;
char xuehao1[1000];
if(b==1)
{
printf("请输入需要修改的学号");
scanf("%s",xuehao1);
while(p1 != NULL)
{
if(strcmp(p1->xuehao,xuehao1)==0)
{
printf("学号:%s\n",p1->xuehao);
printf("名字:%s\n",p1->name);
printf("班级:%s\n",p1->Class);
printf("数学成绩:%.2f\n",p1->mathgrade);
printf("英语成绩:%.2f\n",p1->eglishgrade);
printf("计算机成绩:%.2f\n",p1->computeregrade);
printf("平均成绩:%.2f\n",p1->pingjun);
printf("总分:%.2f\n",p1->zong);
printf("请输入修改后的学号:");
scanf("%s",p1->xuehao);
printf("请输入修改后的姓名:");
scanf("%s",p1->name);
printf("请输入修改后的班级:");
scanf("%s",p1->Class);
int e;
printf("请输入修改后的数学成绩:");
while(1)
{
e=scanf("%f",&p1->mathgrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->mathgrade >= 1 && p1->mathgrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入修改后的英语成绩:");
while(1)
{
e=scanf("%f",&p1->eglishgrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->eglishgrade >=1 && p1->eglishgrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入修改后的计算机成绩:");
while(1)
{
e=scanf("%f",&p1->computeregrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->computeregrade >= 1 && p1->computeregrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
p1->pingjun=(p1->mathgrade+p1->eglishgrade+p1->computeregrade)/3.0;
printf("\n修改后平均成绩为:%.2lf",p1->pingjun);
p1->zong=(p1->mathgrade+p1->eglishgrade+p1->computeregrade);
a=2;
break;
}
p1=p1->next;
}
}
if(a==0){
printf("查无此人");
system("pause");
system("cls");
break;
}
printf("继续修改请输入1,结束修改请输入0\n");
while(1)
{
scanf("%d",&a);
if(a==0||a==1)
{
break;
}else
{
printf("请输入0或1\n");
continue;
}
}
if(a==0)
{
system("pause");
system("cls");
break;
}
}
}
int tui=0;
排序函数:
void pai(stu *head)//冒泡排序
{
stu *p1;
p1=head;
int a=0;
while(p1 != NULL)//该循环为统计链表的结构体个数
{
a++;
p1=p1->next;
}
for(int i=1;i<a;i++)
{
stu *q1=NULL,*q2=NULL,*q3=NULL;//指针初始化
q3=head;
q1=head->next;
q2=q1->next;
for(int j=1 ; j<a-i;j++)
{
if(q1->pingjun > q2->pingjun)
{
q1->next=q2->next;
q3->next=q2;
q2->next=q1;
}
q3=q3->next;//指针移动
q1=q3->next;//指针移动
q2=q1->next;//指针移动
}
}
printf("完成排序\n");
system("pause");
system("cls");
}
显示函数 :
void xianshi(stu*head)//显示所以学生信息
{
stu *p2=NULL;
p2=head->next;
while(p2 != NULL)
{
printf("学号:%s\n",p2->xuehao);
printf("名字:%s\n",p2->name);
printf("班级:%s\n",p2->Class);
printf("数学成绩:%.2f\n",p2->mathgrade);
printf("英语成绩:%.2f\n",p2->eglishgrade);
printf("计算机成绩:%.2f\n",p2->computeregrade);
printf("平均成绩:%.2f\n",p2->pingjun);
printf("总分:%.2f\n",p2->zong);
printf("\n");
p2=p2->next;
}
system("pause");
system("cls");
}
保存txt文件:
void baocun(stu*head)//将输入的学生信息保存在txt格式文件中
{
char a1[20]={"学生姓名:"};
char a2[20]={"学号:"};
char a3[20]={"数学成绩:"};
char a4[20]={"英语成绩:"};
char a5[20]={"计算机成绩:"};
char a6[20]={"总分:"};
stu *p2=NULL;
p2=head->next;
FILE* fp;
if( (fp=fopen("E:\\学生成绩.txt","wb") )== NULL)
{
printf("打开写入文件xue.txt失败\n");
return;
}
while(p2!=NULL)
{
fprintf(fp,"%s",a1);
fprintf(fp,"%s\n",p2->name);
fprintf(fp,"%s",a2);
fprintf(fp,"%s\n",p2->xuehao);
fprintf(fp,"%s",a3);
fprintf(fp,"%.2f\n",p2->mathgrade);
fprintf(fp,"%s",a4);
fprintf(fp,"%.2f\n",p2->eglishgrade);
fprintf(fp,"%s",a5);
fprintf(fp,"%.2f\n",p2->computeregrade);
fprintf(fp,"%s",a6);
fprintf(fp,"%.2f\n",p2->zong);
p2=p2->next;
}
fclose(fp);
printf("保存成功\n");
system("pause");
system("cls");
}
以上就是该系统各功能的代码
下面是这个系统各段代码的组合完全体(可直接运行实现全功能)。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
char xuehao[1000];//学号
char name[20];//姓名
char Class[20];//班级
float mathgrade;//数学成绩
float eglishgrade;//英语成绩
float computeregrade;//计算机成绩
float pingjun;//平均成绩
float zong;//总分
struct student *next;
} stu;
stu *head;
void zeng(stu*head)//增加学生成绩信息
{
while (1)
{
stu *p, *tail, *q;
tail = head;
while (tail->next != NULL) { //尾插法
tail = tail -> next;
}
q = head->next;
int a = 0;
char xuehao1[20];
printf("请输入学生号\n");
scanf("%s",xuehao1);
while(q != NULL)
{
if(strcmp(q->xuehao,xuehao1) == 0)//判断是否输入重复学号
{
a=1;
printf("学号无法重复请输入\n");
break;
}else
{
q=q->next;
}
}
if(a==1)
{
continue;
}
p=(stu*)malloc(sizeof(stu));//为新结构体申请空间
strcpy(p->xuehao,xuehao1);//复制学号到结构体中
printf("请输入姓名");
scanf("%s",p->name);
printf("请输入班级");
scanf("%s",p->Class);
float mathgrade1,eglishgrade1,computeregrade1,pingjun1;
int j;
printf("请输入数学成绩:");
while (1)//该循环为防止输入错误类型和小于1大于100的分数
{
j=scanf("%f",&mathgrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(mathgrade1<=100 && mathgrade1>=1)
{
p->mathgrade=mathgrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入英语成绩:");
while (1)
{
j=scanf("%f",&eglishgrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(eglishgrade1<=100 && eglishgrade1>=1)
{
p->eglishgrade=eglishgrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入计算机成绩:");
while (1)
{
j=scanf("%f",&computeregrade1);
if(j==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');//清除缓存区
continue;
}
if(computeregrade1<=100 && computeregrade1>=1)
{
p->computeregrade=computeregrade1;
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
pingjun1=(mathgrade1+eglishgrade1+computeregrade1)/3.0;//计算平均成绩
printf("平均成绩:%.2f\n",pingjun1);
p->pingjun=pingjun1;
p->zong=mathgrade1+eglishgrade1+computeregrade1;
printf("总分:%.2f",p->zong);
p->next=NULL;//使新创建的结构体指向空
tail->next=p;//使新结构体与链表链接(尾插法)
int i;
printf("是否继续添加\n添加输入1结束输入0\n");
while (1) {
scanf("%d", &i);
if (i == 1 || i == 0)
{
break;
} else {
printf("请输入1或0\n");
continue;
}
}
if (i == 0)
{
system("pause");//暂停
system("cls");//返回
break;
}
}
}
void cancel(stu*head)//删除学生信息
{
stu *p1=NULL,*p2=NULL;//申请结构体指针
p1=head;//初始化
p2=head->next;//初始化
printf("请输入需要删除的学号:");
char xuehao1[1000];
scanf("%s",xuehao1);//存入输入的学号
int a=0;
while(p2 != NULL)
{
if(strcmp(xuehao1,p2->xuehao)==0)//寻找需要删除的部分
{
p1->next=p2->next;
free(p2);
a=1;
break;
}
p1=p2;
p2=p2->next;
}
if(a==1)
{
printf("删除成功");
}else
{
printf("没有找到这个学生,删除失败\n");
}
system("pause");
system("cls");
}
void xianshi(stu*head)//显示所以学生信息
{
stu *p2=NULL;
p2=head->next;
while(p2 != NULL)
{
printf("学号:%s\n",p2->xuehao);
printf("名字:%s\n",p2->name);
printf("班级:%s\n",p2->Class);
printf("数学成绩:%.2f\n",p2->mathgrade);
printf("英语成绩:%.2f\n",p2->eglishgrade);
printf("计算机成绩:%.2f\n",p2->computeregrade);
printf("平均成绩:%.2f\n",p2->pingjun);
printf("总分:%.2f\n",p2->zong);
printf("\n");
p2=p2->next;
}
system("pause");
system("cls");
}
void find(stu*head)//查找需要的学生信息
{
stu *p1=NULL;
int a=0;
char xuehao2[1000];
p1=head->next;
printf("请输入需要查找的学号:");
scanf("%s",xuehao2);
while(p1 != NULL)
{
if(strcmp(xuehao2,p1->xuehao)==0)
{
printf("学号:%s\n",p1->xuehao);
printf("姓名:%s\n",p1->name);
printf("班级:%s\n",p1->Class);
printf("数学成绩:%.2f\n",p1->mathgrade);
printf("英语成绩:%.2f\n",p1->eglishgrade);
printf("计算机成绩:%.2f\n",p1->computeregrade);
printf("平均成绩:%.2f\n",p1->pingjun);
printf("总分:%.2f\n",p1->zong);
system("pause");
system("cls");
a=1;
break;
}
p1=p1->next;
}
if(a==0)
{
printf("查无此人\n");
system("pause");
system("cls");
}
}
void change(stu*head)//更换学生信息
{
while(1)
{
stu *p1=NULL,*p2=NULL;
int a=0;
p1=head->next;
p2=head->next;
int b=1;
char xuehao1[1000];
if(b==1)
{
printf("请输入需要修改的学号");
scanf("%s",xuehao1);
while(p1 != NULL)
{
if(strcmp(p1->xuehao,xuehao1)==0)
{
printf("学号:%s\n",p1->xuehao);
printf("名字:%s\n",p1->name);
printf("班级:%s\n",p1->Class);
printf("数学成绩:%.2f\n",p1->mathgrade);
printf("英语成绩:%.2f\n",p1->eglishgrade);
printf("计算机成绩:%.2f\n",p1->computeregrade);
printf("平均成绩:%.2f\n",p1->pingjun);
printf("总分:%.2f\n",p1->zong);
printf("请输入修改后的学号:");
scanf("%s",p1->xuehao);
printf("请输入修改后的姓名:");
scanf("%s",p1->name);
printf("请输入修改后的班级:");
scanf("%s",p1->Class);
int e;
printf("请输入修改后的数学成绩:");
while(1)
{
e=scanf("%f",&p1->mathgrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->mathgrade >= 1 && p1->mathgrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入修改后的英语成绩:");
while(1)
{
e=scanf("%f",&p1->eglishgrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->eglishgrade >=1 && p1->eglishgrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
printf("请输入修改后的计算机成绩:");
while(1)
{
e=scanf("%f",&p1->computeregrade);
if(e==0||getchar()!='\n')
{
printf("非法输入字符,请重新输入数字:");
while(getchar() != '\n');
continue;
}
if(p1->computeregrade >= 1 && p1->computeregrade <= 100)
{
break;
}else
{
printf("非法输入成绩,请重新输入:");
continue;
}
}
p1->pingjun=(p1->mathgrade+p1->eglishgrade+p1->computeregrade)/3.0;
printf("\n修改后平均成绩为:%.2lf",p1->pingjun);
p1->zong=(p1->mathgrade+p1->eglishgrade+p1->computeregrade);
a=2;
break;
}
p1=p1->next;
}
}
if(a==0){
printf("查无此人");
system("pause");
system("cls");
break;
}
printf("继续修改请输入1,结束修改请输入0\n");
while(1)
{
scanf("%d",&a);
if(a==0||a==1)
{
break;
}else
{
printf("请输入0或1\n");
continue;
}
}
if(a==0)
{
system("pause");
system("cls");
break;
}
}
}
int tui=0;
void chushi()//初始化界面
{
system("pause");
system("cls");
void pai(stu *head);
void baocun(stu*head);
while (1)
{
printf("\t\t****************************\n");
printf("\t\t******学生成绩管理系统******\n");
printf("\t\t****************************\n");
printf("\t\t 1、新增学生成绩信息并保存\n");
printf("\t\t 2、显示所有学生成绩信息\n");
printf("\t\t 3、查询学生成绩信息\n");
printf("\t\t 4、修改学生成绩信息\n");
printf("\t\t 5、删除学生成绩信息\n");
printf("\t\t 6、按照学生总成绩排序\n");
printf("\t\t 7、生成text文件保存\n");
printf("\t\t 0、退出系统\n");
printf("\t\t 请输入你的选择:");
int a,b;
b=scanf("%d",&a);
while(b!=1)
{
while((getchar())!='\n')
{
printf("警告:只能输入数字");
}
b = scanf("%d",&a);
}
system("cls");
switch(a)//利用switch选择结构
{
case 1:
zeng(head);
break;
case 2:
xianshi(head);
break;
case 3:
find(head);
break;
case 4:
chance(head);
break;
case 5:
cancel(head);
break;
case 6:
pai(head);
break;
case 7:
baocun(head);
break;
case 0:
tui = 1;
printf("感谢你使用学生通信录管理系统,请关掉程序!!!\n");
break;
}
if(tui==1)
{
break;
}
}
}
int main()
{
head = (stu*)malloc(sizeof(stu));
head->next=NULL;
char zhanghao1[20] = "a"/*储存注册账号*/,zhanghao2[20]/*储存登录账号*/;
char mima1[20]="a"/*储存注册密码*/,mima2[20]/*储存登录密码*/;
int j;
for(int i=0;i!=1;)
{
printf("\t\t****************************\n");
printf("\t\t******学生成绩管理系统******\n");
printf("\t\t****************************\n");
printf("\t\t请选择\n\t\t1.登录\n\t\t2.注册\n\t\t");
char a[100];
scanf("%s",a);
if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")==0 && strcmp(mima1,"a")==0)//建立了一个简陋的注册登录界面
{
printf("\t\t请先注册账号\n");
printf("\t\t请输入需要创建的账号;");
scanf("%s",zhanghao1);
printf("\t\t请输入需要注册的密码:");
scanf("%s",mima1);
system("pause");
system("cls");
continue;
}else if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")!=0 && strcmp(mima1,"a")!=0)
{
printf("\t\t请输入登录账号:");
scanf("%s",zhanghao2);
printf("\t\t请输入登录密码:");
scanf("%s",mima2);
for(;;)
{
if(strcmp(zhanghao1,zhanghao2)!=0 || strcmp(mima1,mima2)!=0)
{
printf("\t\t账号密码错误\n\t\t请重新输入账号:");
scanf("%s",zhanghao2);
printf("\t\t请重新输入密码:");
scanf("%s",mima2);
j++;
if(j==3)
{
break;
}
}
else
{
printf("成功登录\n");
i=1;
break;
}
}
}else if(strcmp(a,"2")==0)
{
printf("\t\t请输入账号:");
scanf("%s",zhanghao1);
printf("\t\t请输入密码:");
scanf("%s",mima1);
system("pause");
system("cls");
continue;
}else
{
printf("\t\t请输入1或2");
system("pause");
system("cls");
continue;
}
if(j==3)
{
printf("\t\t输入错误次数过多");
break;
}
chushi();
if (tui == 1) {
break;
}
system("pause");
system("cls");
}
return 0;
}
void pai(stu *head)//冒泡排序
{
stu *p1;
p1=head;
int a=0;
while(p1 != NULL)//该循环为统计链表的结构体个数
{
a++;
p1=p1->next;
}
for(int i=1;i<a;i++)
{
stu *q1=NULL,*q2=NULL,*q3=NULL;//指针初始化
q3=head;
q1=head->next;
q2=q1->next;
for(int j=1 ; j<a-i;j++)
{
if(q1->pingjun > q2->pingjun)
{
q1->next=q2->next;
q3->next=q2;
q2->next=q1;
}
q3=q3->next;//指针移动
q1=q3->next;//指针移动
q2=q1->next;//指针移动
}
}
printf("完成排序\n");
system("pause");
system("cls");
}
void baocun(stu*head)//将输入的学生信息保存在txt格式文件中
{
char a1[20]={"学生姓名:"};
char a2[20]={"学号:"};
char a3[20]={"数学成绩:"};
char a4[20]={"英语成绩:"};
char a5[20]={"计算机成绩:"};
char a6[20]={"总分:"};
stu *p2=NULL;
p2=head->next;
FILE* fp;
if( (fp=fopen("E:\\学生成绩.txt","wb") )== NULL)
{
printf("打开写入文件xue.txt失败\n");
return;
}
while(p2!=NULL)
{
fprintf(fp,"%s",a1);
fprintf(fp,"%s\n",p2->name);
fprintf(fp,"%s",a2);
fprintf(fp,"%s\n",p2->xuehao);
fprintf(fp,"%s",a3);
fprintf(fp,"%.2f\n",p2->mathgrade);
fprintf(fp,"%s",a4);
fprintf(fp,"%.2f\n",p2->eglishgrade);
fprintf(fp,"%s",a5);
fprintf(fp,"%.2f\n",p2->computeregrade);
fprintf(fp,"%s",a6);
fprintf(fp,"%.2f\n",p2->zong);
p2=p2->next;
}
fclose(fp);
printf("保存成功\n");
system("pause");
system("cls");
}
这是我的第一篇博客,水平不高。