- 功能概述:分有教师端和学生端
- 1、录入学生信息 2、排列学生信息
3、修改学生信息 4、删除学生信息
5、查找学生信息 6、修改系统密码
7、获取学生人数 8、统计分数信息
9、重置学生账号 0、退出管理信息 - 大一上用于熟练C语言语法,是程序设计实践期末的大作业。所以代码方面还有许多不尽人意的地方。
- 结构体
-
//结构体 struct xs{ char name[20];//姓名 int age;//年龄 char sex[5];//性别 char tel[20];//电话 char bh[20];// int yy;//英语 int sx;//数学 char zh[20];//账号 char mm[20];//密码 char zy[10];//专业 }; struct node{//创建链表 struct node *next;//指针域 struct xs data; };
- main函数
int main() { int s; struct node* list=creat();//创建了list链表 PrintMode(); //系统菜单界面 scanf("%d",&s);//选择进入教师端还是学生端 while(s!=0&&s!=1&&s!=2){ printf("输入错误请重新输入\n"); scanf("%d",&s); } if(s==2){ system("cls");//清屏 printf("进入教师系统,请稍后\n"); sleep(1); char key[100]; dlread(key,"key.txt");//读取教师端的登陆密码文件 read(list,"学生管理系统.txt");//读取文件中的学生信息 gdl(key);//教师端登陆函数,传入密码key int a; while(1){ menu();//教师端的菜单 scanf("%d",&a); keydown(a,list,key);//界面选择功能 system("pause"); system("cls"); write(list,"学生管理系统.txt");//重新将链表的信息写入文件 } } if(s==1){//进入学生端 read(list,"学生管理系统.txt");//读取信息 system("cls"); printf("进入学生系统,请稍后\n"); sleep(1);//延迟效果 struct xs mem; system("cls"); while(1){ dawenjinzuimei();//界面 printf("账号:\n"); char count[20]; scanf("%s",count);//账号输入 printf("密码:\n"); char code[20]; scanf("%s",code);//密码输入 if(search(list,&mem,count,code)) { printf("登录成功!\n"); system("pause"); system("cls"); printf("正在进入系统。。。。。"); Sleep(2*1000); system("cls"); while(1){ studentmenu(mem,list);//选择功能进行 system("cls"); } }else{ printf("账号或密码错误!\n"); system("pause"); } system("cls"); } if(s==0){ system("cls"); printf("退出中\n"); sleep(1); exit(0); } return 0; } }
链表
-
struct node* creat(){//用这个创建,直接调用 struct node* headnode=(struct node*)malloc(sizeof(struct node)); headnode->next=NULL; return headnode; } struct node* list(struct xs data){//存入 struct node *newnode=(struct node*)malloc(sizeof(struct node)); newnode->next=NULL; newnode->data=data; return newnode; } void cr(struct node *headnode,struct xs data){//增加节点 struct node *newnode=list(data); newnode->next=headnode->next; headnode->next=newnode; }
gdl函数用于教师端登录
-
#include <stdio.h> void gdl(char*key) {//登陆界面函数 printf("\t╔══════════════════════════════════════════════════════════════╗\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ._______________________. ║\n"); printf("\t║ | _____________________ | ║\n"); printf("\t║ | I I | ║\n"); printf("\t║ | I 教师管理系统 I | ║\n"); printf("\t║ | I I | ║\n"); printf("\t║ | I___________________I | ║\n"); printf("\t║ !_______________________! ║\n"); printf("\t║ ._[__________]_. ║\n"); printf("\t║ .___|_______________|___. ║\n"); printf("\t║ | | ║\n"); printf("\t║ | 请输入密码: | ║\n"); printf("\t║ !_____________________! ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t╚══════════════════════════════════════════════════════════════╝\n"); char*m; while(1) { m=num();//密码隐藏输入,返回字符串 if(strcmp(m,key)==0) { printf("登录成功\n"); printf("请稍等............\n"); sleep(1);//延迟 system("cls"); break; }else { printf("密码错误,重新输入\n"); } } }
各个界面函数
-
void gdyaidawenjin()//学生界面 { printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 信 息 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 请选择编号 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 1. 分 数 信 息 ********\n"); printf("\t\t\t****** 2. 基 本 信 息 ********\n"); printf("\t\t\t****** 0. 返 回 上 级 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); } void woaidawenjin()//学生界面 { printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 学 生 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 请选择系统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 1. 修 改 密 码 ********\n"); printf("\t\t\t****** 2. 查 询 修 改 ********\n"); printf("\t\t\t****** 0. 退 出 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); } void gudeyangaidawenjin()//学生界面 { printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 修 改 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 请选择编号 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 1. 修 改 性 别 ********\n"); printf("\t\t\t****** 2. 修 改 年 龄 ********\n"); printf("\t\t\t****** 3. 修 改 账 号 ********\n"); printf("\t\t\t****** 4. 修 改 电 话 ********\n"); printf("\t\t\t****** 5. 修 改 密 码 ********\n"); printf("\t\t\t****** 0. 退 出 菜 单 ********\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); }
void menu(){//教师主菜单 printf("\n"); printf("*****************************************************\n"); printf("* 学生信息管理系统 *\n"); printf("*****************************************************\n"); printf("********************系统功能菜单*********************\n"); printf("----------------------- -------------------------\n"); printf("*****************************************************\n"); printf("** 1、录入学生信息 * 2、排列学生信息 **\n"); printf("*****************************************************\n"); printf("** 3、修改学生信息 * 4、删除学生信息 **\n"); printf("*****************************************************\n"); printf("** 5、查找学生信息 * 6、修改系统密码 **\n"); printf("*****************************************************\n"); printf("** 7、获取学生人数 * 8、统计分数信息 **\n"); printf("*****************************************************\n"); printf("** 9、重置学生账号 * 0、退出管理信息 **\n"); printf("----------------------- -------------------------\n"); } void PrintMode(){//系统菜单页面 printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 教 学 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 请选择系统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** 1. 学 生 系 统 ********\n"); printf("\t\t\t****** 2. 教 师 系 统 ********\n"); printf("\t\t\t****** 0. 退 出 系 统 ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t****** ********\n"); printf("\t\t\t**************************************\n"); printf("\t\t\t**************************************\n"); } void dawenjinzuimei() { printf("\t╔══════════════════════════════════════════════════════════════╗\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ._______________________. ║\n"); printf("\t║ | _____________________ | ║\n"); printf("\t║ | I I | ║\n"); printf("\t║ | I 学生登陆界面 I | ║\n"); printf("\t║ | I I | ║\n"); printf("\t║ | I___________________I | ║\n"); printf("\t║ !_______________________! ║\n"); printf("\t║ ._[__________]_. ║\n"); printf("\t║ .___|_______________|___. ║\n"); printf("\t║ | | ║\n"); printf("\t║ | 我爱肖老师 | ║\n"); printf("\t║ !_____________________! ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t║ ║\n"); printf("\t╚══════════════════════════════════════════════════════════════╝\n"); }
学生端信息更改函数
-
void change2(struct node* L,struct xs mem)//信息更改函数 { struct node* p=L->next; int b;//用于选择修改内容 char a[100]; if(p==NULL){ printf("你还未创建链表!\n"); return; } else{ while(p) { system("cls"); if(strcmp(mem.bh,p->data.bh)==0 ){ printf("查找成功!\n"); printf("目前您的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 专业:%s 账号:%s 密码:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.zy,p->data.zh,p->data.mm); system("pause"); gudeyangaidawenjin(); printf("请输入您要修改的部分的选项\n"); scanf("%d",&b); sc(L,mem.bh); switch(b) { case 1:printf("性别修改为:\n"); scanf("%s",&p->data.sex ); break; case 2:printf("年龄修改为:\n"); scanf("%d",&p->data.age); break; case 3:printf("账号修改为:\n"); scanf("%s",&p->data.zh ); break; case 4:printf("电话修改为:\n"); scanf("%s",&p->data.tel ); break; case 5:printf("密码修改为:\n"); scanf("%s",&p->data.mm); break; case 0:return; default:printf("选择错误\n"); break; } cr(L,p->data); printf("现在您的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 专业:%s 账号:%s 密码:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.zy,p->data.zh,p->data.mm); return; } p=p->next; } if(p==NULL){ printf("不存在的学生信息!请检查信息输入是否有误\n"); return; } } }
教师端更改函数
-
void change(struct node* L)//信息更改函数 { struct node* p=L->next; int i; int b;//用于选择修改内容 char a[100]; if(p==NULL){ printf("你还未创建链表!\n"); return; } else{printf("您要修改的学生信息的学号是:\n"); scanf("%s",a); while(p) { system("cls"); if(strcmp(a,p->data.bh)==0 ){ printf("查找成功!\n"); printf("目前他的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 英语成绩:%d 数学成绩:%d 专业:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.yy,p->data.sx,p->data.zy); zcd(); printf("请输入您要修改的部分的选项\n"); scanf("%d",&b); switch(b) { case 9:printf("姓名修改为:\n"); scanf("%s",&p->data.name); printf("性别修改为:\n"); scanf("%s",&p->data.sex); printf("电话修改为:\n"); scanf("%s",&p->data.tel); printf("学号修改为:\n"); scanf("%s",&p->data.bh); printf("年龄修改为:\n"); scanf("%d",&p->data.age); printf("英语成绩修改为:\n"); scanf("%d",&p->data.yy); printf("数学成绩修改为:\n"); scanf("%d",&p->data.sx); printf("专业修改为:\n"); scanf("%s",&p->data.zy); printf("修改成功\n"); break; case 1:printf("姓名修改为:\n"); scanf("%s",&p->data.name ); break; case 2:printf("年龄修改为:\n"); scanf("%d",&p->data.age); break; case 3:printf("性别修改为:\n"); scanf("%s",&p->data.sex ); break; case 4:printf("电话修改为:\n"); scanf("%s",&p->data.tel ); break; case 5:printf("高等数学成绩修改为:\n"); scanf("%d",&p->data.sx); break; case 6:printf("大学英语成绩修改为:\n"); scanf("%d",&p->data.yy ); break; case 7:printf("学号修改为:\n"); scanf("%s",&p->data.bh ); break; case 8:printf("专业修改为:\n"); scanf("%s",&p->data.zy ); break; case 10:return; default:printf("选择错误\n"); break; } printf("现在他的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 英语成绩:%d 数学成绩:%d 专业:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.yy,p->data.sx,p->data.zy); return; } p=p->next; } if(p==NULL){ printf("不存在的学生信息!请检查信息输入是否有误\n"); return; } } }
-
学生的密码修改函数
void studentmenu(struct xs mem,struct node*list) { //界面 woaidawenjin();//学生界面 int n; scanf("%d",&n); system("cls"); switch(n){ case 1: { printf("密码修改为:\n"); scanf("%s",mem.mm); sc(list,mem.bh); cr(list,mem); write(list,"学生管理系统.txt"); break; } case 2: { change2(list,mem); write(list,"学生管理系统.txt"); break; } case 0: exit(0); break; } }
教师的密码更改函数
-
void Pkey(char*key)//密码更改函数 { printf("请输入您想要改为的密码:\n"); scanf("%s",key); dlwrite(key,"key.txt"); }
密码隐藏输入
-
char* num()//密码隐藏输入 { char a[100]; int i; char m; for(i=0;;i++) { m=getch(); if(m=='\r') { break; } if(m=='\b') { if(i>0) { i--; printf("\b \b"); }else { putchar(7); } }else { a[i]=m; printf("*"); } } a[i]='\0'; printf("\n"); return a; }
文件操作
-
void read(struct node *headnode,char *file){ FILE *p=fopen(file,"r"); struct xs data; if(p==NULL){ p=fopen(file,"w+"); } while(fscanf(p, "%s %s %s %s %d %d %d %s %s %s",&data.bh,&data.name,&data.sex,&data.tel,&data.age,&data.sx,&data.yy,&data.zy,&data.zh,&data.mm)!=EOF){ cr(headnode,data); } fclose(p); } void write(struct node *headnode,char *file){ FILE *p=fopen(file,"w"); struct node *move=headnode->next; while(move) { fprintf(p, "%s %s %s %s %d %d %d %s %s %s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy,move->data.zh,move->data.mm); move=move->next; } fclose(p); } void dlread(char*key,char*file)//密码文件 { FILE *p=fopen(file,"r"); if(p==NULL) { p=fopen(key,"w+"); } fscanf(p,"%s",key); fclose(p); } void dlwrite(char *key,char*file)//密码读入文件 { FILE *p=fopen(file,"w"); fprintf(p,"%s",key); fclose(p); }
交互函数
-
void keydown(int a,struct node*list,char *key){ struct xs data; switch(a) { system("cls"); case 0: gt(); break; case 1: gl(list); break; case 2: pl(list); break; case 3: change(list); break; case 4: gshanchu(list); break; case 5: gsearch(list); break; case 6: Pkey(key); break; case 7: n(list); break; case 8: tj(list); break; case 9: { if( rewrite(list)){ printf("重置成功!\n"); } break; } default: printf("输入错误"); break; } }
查找函数
-
void gll(struct node*list)//浏览函数 { printf("浏览\n"); printflist(list); } void gsearch(struct node*list)//分类查找 { int a; char b[100]; printf("查找\n"); printf("请选择查找的方式\n"); printf("1、姓名查找\n"); printf("2、学号查找\n"); printf("3、浏览全部学生\n"); printf("4、专业查找\n"); printf("请输入\n"); scanf("%d",&a); while(a!=1&&a!=2&&a!=3&&a!=4)//判断乱输入bug { printf("请正确输入\n"); scanf("%d",&a); } if(a==1) { printf("请输入查找的姓名:\n"); scanf("%s",&b); gdy(list,b); } if(a==2) { printf("输入您想找的人的学号:\n"); scanf("%s",&b); cz(list,b); } if(a==3){ gll(list); } if(a==4){ printf("输入您想查找的专业:\n"); scanf("%s",&b); dwj(list,b); } } void cz(struct node *headnode,char *n){ struct node* move=headnode->next; if(move==NULL){ printf("数据为空\n"); return; } while(strcmp(move->data.bh,n)!=0){ move=move->next; if(move==NULL){ printf("未找到\n"); return; } } if(move!=NULL){ printf("您找的人如下\n"); printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); } } void dwj(struct node*headnode,char*a)//专业查找 { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的专业就停止循环 if(move!=NULL&&strcmp(a,move->data.zy )==0){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } } void gdy(struct node*headnode,char*a)//姓名查找 { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的姓名就停止循环 if(move!=NULL&&strcmp(a,move->data.name)==0){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } }
检查学号录入唯一性
-
int jc(struct node*head,char *a)//检查是否学号重复 { struct node *move=head->next; while(move!=NULL) { if(strcmp(move->data.bh,a)==0) { printf("输入错误,已存在该学号,将返回主界面\n"); system("pause"); return 1;//输入错误的话就返回1 } move=move->next; } printf("添加成功\n"); return 0;//添加成功返回0 }
录入
-
void gl(struct node*list)//录入函数 { struct xs data; printf("录入\n"); printf("请输入您想输入学生的学号\n"); scanf("%s",&data.bh); printf("请输入您想输入学生的姓名\n"); scanf("%s",&data.name); printf("请输入您想输入学生的性别\n"); scanf("%s",&data.sex); printf("请输入您想输入学生的电话\n"); scanf("%s",&data.tel); printf("请输入您想输入学生的年龄\n"); scanf("%d",&data.age); printf("请输入您想输入学生的英语成绩\n"); scanf("%d",&data.yy); printf("请输入您想输入学生的数学成绩\n"); scanf("%d",&data.sx); printf("请输入您想输入学生的专业\n"); scanf("%s",&data.zy); int b=jc(list,data.bh); if(b==1) { return; } cr(list,data); }
浏览全部
-
void printflist(struct node* headnode){ struct node *move=headnode->next; while(move){ printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); move=move->next; } }
对于查找中学生分数信息的函数,写的太拉跨了这段,请谅解
-
void tj(struct node*list) { int a=1; printf("1、查询优秀的人 90以上\n"); printf("2、查询良好的人 80以上\n"); printf("3、查询及格的人 60以上\n"); printf("4、查询不及格的人 60以下\n"); printf("请输入您要查询的编号\n"); while(a!=2) { scanf("%d",&a); switch(a) { case 1:youxiu(list); a=2; break; case 2:lh(list); a=2; break; case 3:jg(list); a=2; break; case 4:bjg(list); a=2; default:printf("请重新输入\n"); } } } void youxiu(struct node*headnode) { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的就停止循环 if(move!=NULL&&move->data.yy+move->data.sx>=90){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } } void lh(struct node*headnode) { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的就停止循环 if(move!=NULL&&move->data.yy+move->data.sx<90&&move->data.yy+move->data.sx>=80){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } } void jg(struct node*headnode) { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的就停止循环 if(move!=NULL&&move->data.yy+move->data.sx>=60){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } } void bjg(struct node*headnode) { struct node* move=headnode->next;//接收传来的头节点 if(move==NULL){ printf("数据为空\n");//链表为空, return; } int b=1;//判断是否找出来人了 while(1){//找到对应的就停止循环 if(move!=NULL&&move->data.yy+move->data.sx<60){ if(b==1) { printf("您找的人如下\n"); } printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy); b++;//打印几次您找的人 } if(move==NULL){//循环完了 if(b!=1)//找到人就不打印未找到 { return; } printf("未找到\n"); return; } move=move->next;//指向下一个 } }
一样拉垮的排列
-
void pl(struct node *list){//选择排列方式 int a,b; printf("1.学号排序\n"); printf("2.大学英语成绩从大到小排序\n"); printf("3.高数成绩从大到小排序\n"); printf("请输入您的选择\n"); scanf("%d",&a); while(a!=1&&a!=2&&a!=3){ printf("输入错误,请从新输入\n"); scanf("%d",&a); } if(a==1){ if(line1(list)){ printf("排序成功!\n"); sleep(1); system("cls"); printflist(list); } } if(a==2){ if(line2(list)){ printf("排序成功!\n"); sleep(1); system("cls"); printflist(list); } } if(a==3){ if(line3(list)){ printf("排序成功!\n"); sleep(1); system("cls"); printflist(list); } } } int line1(struct node*list)//学号 { struct xs a; struct node*pmove=list->next; struct node*pmovefront=list; if(pmove==NULL){ printf("学生信息为空!\n"); return 0; }else{ while(pmove!=NULL){ while(pmove->next!=NULL){ if(strcmp(pmove->data.bh,pmove->next->data.bh)>0){ a.age=pmove->data.age; a.sx=pmove->data.sx; a.yy=pmove->data.yy; strcpy(a.bh,pmove->data.bh); strcpy(a.mm,pmove->data.mm); strcpy(a.name,pmove->data.name); strcpy(a.sex,pmove->data.sex); strcpy(a.tel,pmove->data.tel); strcpy(a.zh,pmove->data.zh); strcpy(a.zy,pmove->data.zy); pmove->data.age=pmove->next->data.age; pmove->data.sx=pmove->next->data.sx; pmove->data.yy=pmove->next->data.yy; strcpy(pmove->data.bh,pmove->next->data.bh); strcpy(pmove->data.mm,pmove->next->data.mm); strcpy(pmove->data.name,pmove->next->data.name); strcpy(pmove->data.sex,pmove->next->data.sex); strcpy(pmove->data.tel,pmove->next->data.tel); strcpy(pmove->data.zh,pmove->next->data.zh); strcpy(pmove->data.zy,pmove->next->data.zy); pmove->next->data.age=a.age; pmove->next->data.sx=a.sx; pmove->next->data.yy=a.yy; strcpy(pmove->next->data.bh,a.bh ); strcpy(pmove->next->data.mm,a.mm ); strcpy(pmove->next->data.name,a.name ); strcpy(pmove->next->data.sex,a.sex ); strcpy(pmove->next->data.tel,a.tel ); strcpy(pmove->next->data.zh,a.zh ); strcpy(pmove->next->data.zy,a.zy ); } pmove=pmove->next; } pmove=pmovefront->next; pmovefront=pmove; } return 1; } } int line2(struct node*list)//英语高到低 { struct xs a; struct node*pmove=list->next; struct node*pmovefront=list; if(pmove==NULL){ printf("学生信息为空!\n"); return 0; }else{ while(pmove!=NULL){ while(pmove->next!=NULL){ if(pmove->data.yy<pmove->next->data.yy){ a.age=pmove->data.age; a.sx=pmove->data.sx; a.yy=pmove->data.yy; strcpy(a.bh,pmove->data.bh); strcpy(a.mm,pmove->data.mm); strcpy(a.name,pmove->data.name); strcpy(a.sex,pmove->data.sex); strcpy(a.tel,pmove->data.tel); strcpy(a.zh,pmove->data.zh); strcpy(a.zy,pmove->data.zy); pmove->data.age=pmove->next->data.age; pmove->data.sx=pmove->next->data.sx; pmove->data.yy=pmove->next->data.yy; strcpy(pmove->data.bh,pmove->next->data.bh); strcpy(pmove->data.mm,pmove->next->data.mm); strcpy(pmove->data.name,pmove->next->data.name); strcpy(pmove->data.sex,pmove->next->data.sex); strcpy(pmove->data.tel,pmove->next->data.tel); strcpy(pmove->data.zh,pmove->next->data.zh); strcpy(pmove->data.zy,pmove->next->data.zy); pmove->next->data.age=a.age; pmove->next->data.sx=a.sx; pmove->next->data.yy=a.yy; strcpy(pmove->next->data.bh,a.bh ); strcpy(pmove->next->data.mm,a.mm ); strcpy(pmove->next->data.name,a.name ); strcpy(pmove->next->data.sex,a.sex ); strcpy(pmove->next->data.tel,a.tel ); strcpy(pmove->next->data.zh,a.zh ); strcpy(pmove->next->data.zy,a.zy ); } pmove=pmove->next; } pmove=pmovefront->next; pmovefront=pmove; } return 1; } } int line3(struct node*list)//数学高到低 { struct xs a; struct node*pmove=list->next; struct node*pmovefront=list; if(pmove==NULL){ printf("学生信息为空!\n"); return 0; }else{ while(pmove!=NULL){ while(pmove->next!=NULL){ if(pmove->data.sx<pmove->next->data.sx){ a.age=pmove->data.age; a.sx=pmove->data.sx; a.yy=pmove->data.yy; strcpy(a.bh,pmove->data.bh); strcpy(a.mm,pmove->data.mm); strcpy(a.name,pmove->data.name); strcpy(a.sex,pmove->data.sex); strcpy(a.tel,pmove->data.tel); strcpy(a.zh,pmove->data.zh); strcpy(a.zy,pmove->data.zy); pmove->data.age=pmove->next->data.age; pmove->data.sx=pmove->next->data.sx; pmove->data.yy=pmove->next->data.yy; strcpy(pmove->data.bh,pmove->next->data.bh); strcpy(pmove->data.mm,pmove->next->data.mm); strcpy(pmove->data.name,pmove->next->data.name); strcpy(pmove->data.sex,pmove->next->data.sex); strcpy(pmove->data.tel,pmove->next->data.tel); strcpy(pmove->data.zh,pmove->next->data.zh); strcpy(pmove->data.zy,pmove->next->data.zy); pmove->next->data.age=a.age; pmove->next->data.sx=a.sx; pmove->next->data.yy=a.yy; strcpy(pmove->next->data.bh,a.bh ); strcpy(pmove->next->data.mm,a.mm ); strcpy(pmove->next->data.name,a.name ); strcpy(pmove->next->data.sex,a.sex ); strcpy(pmove->next->data.tel,a.tel ); strcpy(pmove->next->data.zh,a.zh ); strcpy(pmove->next->data.zy,a.zy ); } pmove=pmove->next; } pmove=pmovefront->next; pmovefront=pmove; } return 1; } }
重置功能
-
int rewrite(struct node*list) { struct node*pmove=list->next; if(pmove==NULL){ printf("学生信息为空!\n"); return 0; }else{ printf("默认初始账号为学号!\n"); printf("请输入初始化密码:\n"); char a[20]; scanf("%s",a); while(pmove){ strcpy(pmove->data.zh,pmove->data.bh); strcpy(pmove->data.mm,a); pmove=pmove->next; } return 1; } }
删除
-
void gshanchu(struct node*list) { char a[100]; printf("删除\n"); printf("输入想删除的人的学号\n"); scanf("%s",a); sc(list,a); } void sc(struct node *headnode,char *n){ struct node* move=headnode->next; struct node* movef=headnode; if(move==NULL){ printf("数据为空,无法删除\n"); return; } while(strcmp(move->data.bh,n)!=0){ movef=move; move=move->next; if(move==NULL){ printf("未找到此人\n"); return; }//移动结构体指针 } movef->next=move->next; free(move); }
学生端个人查找
-
int search(struct node*list,struct xs *mem,char *count,char *code)//判断账号密码是否正确并传值给结构体 { struct node*pmove=list->next; if(pmove==NULL){ return 0; }else{ while(pmove){ if(strcmp(pmove->data.zh,count)==0&&strcmp(pmove->data.mm,code)==0){ mem->age=pmove->data.age; mem->yy=pmove->data.yy; mem->sx=pmove->data.sx; strcpy(mem->name,pmove->data.name); strcpy(mem->sex,pmove->data.sex); strcpy(mem->tel,pmove->data.tel); strcpy(mem->bh,pmove->data.bh); strcpy(mem->zh,pmove->data.zh); strcpy(mem->mm,pmove->data.mm); strcpy(mem->zy,pmove->data.zy); return 1; } pmove=pmove->next; } printf("输入错误\n"); return 0; } }
这是加的一个拉垮功能,主要是看着功能多一点的假象,分高一点
-
void n(struct node *list){ int a=0; struct node *move=list->next; while(move){ a++; move=move->next; } printf("已录入的学生的人数:"); printf("%d\n",a); }
退出程序
-
void gt()//退出函数 { printf("退出\n"); system("pause"); exit(0); }
其中一些功能都是在CSDN上面先理解别人怎么做到的,自己才学会写的。
-
这个程序已经答辩过了,老师给了89分。