-
用文件fw读写链表_学生信息管理系统(C语言\单向链表\文件读写)
2021-01-13 19:38:16最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享...最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享出来。
我是在Ubuntu上用vim写的,当然了这些代码window下也可以运行。文章最后有完整代码。
一 实现功能
1、查看学生信息
2、添加学生信息。
3、删除学生信息
4、修改学生信息
5、保存学生信息到文件
6、刷新学生信息(从文件中恢复学生信息)
0、退出系统
二 表示学生的数据结构
struct student { char name[10]; //名字 int score; //分数 int number; //序号 int age; //年龄 }; struct LNode { struct student data; //数据域 struct LNode *next; //指针域 }; typedef struct LNode LinkList;
三 实现菜单
void meum() { printf("n ***************************** n"); printf(" 学生信息管理系统 n"); printf(" ***************************** n"); printf(" 系统菜单功能 n"); printf(" ***************************** n"); printf(" 1.查看学生信息 n"); printf(" 2.添加学生信息 n"); printf(" 3.删除学生信息 n"); printf(" 4.修改学生信息 n"); printf(" 5.保存学生信息 n"); printf(" 6.刷新学生信息 n"); printf(" 0.退出系统 n"); }
四 实现增加学生的功能
void creat_node(LinkList *L) { char name; LinkList *node=NULL; LinkList *temp=L->next; //作为链表连接的中间点 node=(LinkList *)malloc(sizeof(LinkList)); //分配内存 if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); printf("n请输入学生序号:"); scanf("%d",&node->data.number); printf("n请输入学生名:"); scanf("%s",node->data.name); printf("n请输入学生成绩:"); scanf("%d",&node->data.score); printf("n请输入学生年龄:"); scanf("%d",&node->data.age); L->next=node; node->next=temp; }
五 显示学生信息
void show_student(LinkList *L) { LinkList *p=L->next; int i=0; printf("n ************************** n"); printf(" 学生信息 n"); printf(" ************************** n"); printf(" 序号 姓名 成绩 年龄 n"); while(p) { printf(" %d %s %d %d n",p->data.number,p->data.name,p->data.score,p->data.age); i++; p=p->next; } }
六 删除学生
可以选择
1、按序号删除。
2、按姓名删除。
void delete_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp,*pre; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.按序号删除!"); printf("n 2.按姓名删除!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) //根据输入的序号找到学生并删除 { printf("n 请输入要删除的学生序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { pre=temp; temp=temp->next; } if(temp->data.number==number) { pre->next=temp->next; free(temp); } else { printf("n 没有所要删除的学生序号!"); } } else if(x==2) //根据输入的姓名找到学生并删除 { printf("n 请输入要删除的学生名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { pre=temp; temp=temp->next; } if(strcmp(temp->data.name,name)==0) { pre->next=temp->next; free(temp); } else { printf("n 没有要删除的学生姓名!"); } } }
七 修改学生信息
首先找到学生,然后对找到的学生信息进行修改。
可以选择按序号和按姓名来找学生。
找到学生后,可以选择修改学生的任意一项信息。
void modify_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.知道要修改学生的序号!"); printf("n 2.知道要修改学生的名字!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) { printf("n 请输入要修改学生的序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { temp=temp->next; } if(temp->data.number==number) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的序号!"); } } else if(x==2) { printf("n 请输入要修改学生的名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { temp=temp->next; } if(strcmp(temp->data.name,name)==0) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的姓名!"); } } printf("n ************************"); printf("n 姓名:%s 序号:%d 成绩:%d 年龄:%d",temp->data.name,temp->data.number,temp->data.score,temp->data.age); do{ printf("n 请选择:"); printf("n 1.修改序号!"); printf("n 2.修改名字!"); printf("n 3.修改成绩!"); printf("n 4.修改年龄!"); printf("n 请输入选择:"); scanf("%d",&x); }while(x<1 || x>4); if(x==1) { printf("n 请输入修改后的序号:"); scanf("%d",&temp->data.number); } if(x==2) { printf("n 请输入修改后的名字:"); scanf("%s",temp->data.name); } if(x==3) { printf("n 请输入修改后的成绩:"); scanf("%d",&temp->data.score); } if(x==4) { printf("n 请输入修改后的年龄:"); scanf("%d",&temp->data.age); } }
八 保存到文件
void save(LinkList *L) { FILE *fp; int i=0; LinkList *temp; temp=L->next; if((fp=fopen("student.txt","a"))==NULL) { printf("n 无法打开文件!"); exit(1); } while(temp!=NULL) { i++; fprintf(fp,"%d %s %d %d n",temp->data.number,temp->data.name,temp->data.score,temp->data.age); printf("n 第%d个已经保存!",i); temp=temp->next; } fclose(fp); }
九 从文件中恢复
void refresh(LinkList *L) { FILE *fp; LinkList *node=NULL; LinkList *temp=L->next; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); fp=fopen("student.txt","r"); if(fp==NULL) { printf("n 无法打开文件!"); exit(1); } while(!feof(fp)) { fscanf(fp,"%d %s %d %d",&node->data.number,node->data.name,&node->data.score,&node->data.age); L->next=node; node->next=temp; temp=node; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); } printf("n 已经成功刷新学生信息!"); }
十 主函数
主函数中先创建一个头节点(不保存学生信息,便于操作空链表),然后进入主菜单,功能选择模块被我独立成一个函数,代码在主函数后面。
void main() { int i; LinkList *L=NULL; L=(LinkList *)malloc(sizeof(LinkList)); if(L==NULL) { printf("分配头节点内存出错!"); exit(1); } memset(L,0,sizeof(LinkList)); L->next=NULL; int stop=1; while(1) { meum(); choice(&stop,L); if(stop==0) break; printf("n 下一步操作:"); printf("n 1.返回主界面"); printf("n 2.退出系统"); printf("n 请输入操作:"); scanf("%d",&i); if(i==2) break; } } void choice(int *stop,LinkList *L) { int num; printf("nn 请输入菜单选项:"); scanf("%d",&num); switch (num) { case 0: *stop=0; break; case 1: show_student(L); break; case 2: creat_node(L); break; case 3: delete_student(L); break; case 4: modify_student(L); break; case 5: save(L); break; case 6: refresh(L); break; default: printf(" 请在0-6中间选择n"); } }
十一 优化建议
上面有一些写法可以进行优化的,但是因为这只是一个小项目没必要分那么多函数(分了引用次数也十分有限),并且这样更符合我的思路(一功能一模块),就没有进行优化。可以优化的如下:
1、将有复用的代码段独立写成函数,减少代码函数,例如选择和分配节点空间那里独立成函数。
2、将部分较长的函数进行功能分割,便于阅读。
十二 扩展建议
一、增加排序功能。
二、增加代码修改后写回文件时的检验是否修改的功能。
三、扩展界面。
十四 全部代码
#include<stdio.h> #include<stdlib.h> #include<string.h> struct student { char name[10]; int score; int number; int age; }; struct LNode { struct student data; struct LNode *next; }; typedef struct LNode LinkList; void meum(); void choice(int *stop,LinkList *L); void creat_node(LinkList *L); void show_student(LinkList *L); void delete_student(LinkList *L); void modify_student(LinkList *L); void save(LinkList *L); void refresh(LinkList *L); void main() { int i; LinkList *L=NULL; L=(LinkList *)malloc(sizeof(LinkList)); if(L==NULL) { printf("分配头节点内存出错!"); exit(1); } memset(L,0,sizeof(LinkList)); L->next=NULL; int stop=1; while(1) { meum(); choice(&stop,L); if(stop==0) break; printf("n 下一步操作:"); printf("n 1.返回主界面"); printf("n 2.退出系统"); printf("n 请输入操作:"); scanf("%d",&i); if(i==2) break; } } void choice(int *stop,LinkList *L) { int num; printf("nn 请输入菜单选项:"); scanf("%d",&num); switch (num) { case 0: *stop=0; break; case 1: show_student(L); break; case 2: creat_node(L); break; case 3: delete_student(L); break; case 4: modify_student(L); break; case 5: save(L); break; case 6: refresh(L); break; default: printf(" 请在0-6中间选择n"); } } void meum() { printf("n ***************************** n"); printf(" 学生信息管理系统 n"); printf(" ***************************** n"); printf(" 系统菜单功能 n"); printf(" ***************************** n"); printf(" 1.查看学生信息 n"); printf(" 2.添加学生信息 n"); printf(" 3.删除学生信息 n"); printf(" 4.修改学生信息 n"); printf(" 5.保存学生信息 n"); printf(" 6.刷新学生信息 n"); printf(" 0.退出系统 n"); } void creat_node(LinkList *L) { char name; LinkList *node=NULL; LinkList *temp=L->next; //作为链表连接的中间点 node=(LinkList *)malloc(sizeof(LinkList)); //分配内存 if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); printf("n请输入学生序号:"); scanf("%d",&node->data.number); printf("n请输入学生名:"); scanf("%s",node->data.name); printf("n请输入学生成绩:"); scanf("%d",&node->data.score); printf("n请输入学生年龄:"); scanf("%d",&node->data.age); L->next=node; node->next=temp; } void show_student(LinkList *L) { LinkList *p=L->next; int i=0; printf("n ************************** n"); printf(" 学生信息 n"); printf(" ************************** n"); printf(" 序号 姓名 成绩 年龄 n"); while(p) { printf(" %d %s %d %d n",p->data.number,p->data.name,p->data.score,p->data.age); i++; p=p->next; } } void delete_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp,*pre; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.按序号删除!"); printf("n 2.按姓名删除!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) //根据输入的序号找到学生并删除 { printf("n 请输入要删除的学生序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { pre=temp; temp=temp->next; } if(temp->data.number==number) { pre->next=temp->next; free(temp); } else { printf("n 没有所要删除的学生序号!"); } } else if(x==2) //根据输入的姓名找到学生并删除 { printf("n 请输入要删除的学生名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { pre=temp; temp=temp->next; } if(strcmp(temp->data.name,name)==0) { pre->next=temp->next; free(temp); } else { printf("n 没有要删除的学生姓名!"); } } } void modify_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.知道要修改学生的序号!"); printf("n 2.知道要修改学生的名字!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) { printf("n 请输入要修改学生的序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { temp=temp->next; } if(temp->data.number==number) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的序号!"); } } else if(x==2) { printf("n 请输入要修改学生的名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { temp=temp->next; } if(strcmp(temp->data.name,name)==0) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的姓名!"); } } printf("n ************************"); printf("n 姓名:%s 序号:%d 成绩:%d 年龄:%d",temp->data.name,temp->data.number,temp->data.score,temp->data.age); do{ printf("n 请选择:"); printf("n 1.修改序号!"); printf("n 2.修改名字!"); printf("n 3.修改成绩!"); printf("n 4.修改年龄!"); printf("n 请输入选择:"); scanf("%d",&x); }while(x<1 || x>4); if(x==1) { printf("n 请输入修改后的序号:"); scanf("%d",&temp->data.number); } if(x==2) { printf("n 请输入修改后的名字:"); scanf("%s",temp->data.name); } if(x==3) { printf("n 请输入修改后的成绩:"); scanf("%d",&temp->data.score); } if(x==4) { printf("n 请输入修改后的年龄:"); scanf("%d",&temp->data.age); } } void save(LinkList *L) { FILE *fp; int i=0; LinkList *temp; temp=L->next; if((fp=fopen("student.txt","a"))==NULL) { printf("n 无法打开文件!"); exit(1); } while(temp!=NULL) { i++; fprintf(fp,"%d %s %d %d n",temp->data.number,temp->data.name,temp->data.score,temp->data.age); printf("n 第%d个已经保存!",i); temp=temp->next; } fclose(fp); } void refresh(LinkList *L) { FILE *fp; LinkList *node=NULL; LinkList *temp=L->next; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); fp=fopen("student.txt","r"); if(fp==NULL) { printf("n 无法打开文件!"); exit(1); } while(!feof(fp)) { fscanf(fp,"%d %s %d %d",&node->data.number,node->data.name,&node->data.score,&node->data.age); L->next=node; node->next=temp; temp=node; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); } printf("n 已经成功刷新学生信息!"); }
-
C语言基于链表的学生成绩管理系统
2020-09-15 10:19:24(使用C语言)(基本思路已给出) 基于链表的学生成绩管理系统(1)输入5个学生3门课的成绩存入链表中; (2)输出学生信息; (3)求每个学生的平均分; (4)输入一个学号num,查找其学号等于num的学生。要求:用链表存放学生... -
c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)
2020-11-29 06:46:03最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享...最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享出来。
我是在Ubuntu上用vim写的,当然了这些代码window下也可以运行。文章最后有完整代码。
一 实现功能
1、查看学生信息
2、添加学生信息。
3、删除学生信息
4、修改学生信息
5、保存学生信息到文件
6、刷新学生信息(从文件中恢复学生信息)
0、退出系统
二 表示学生的数据结构
struct
三 实现菜单
void meum() { printf("n ***************************** n"); printf(" 学生信息管理系统 n"); printf(" ***************************** n"); printf(" 系统菜单功能 n"); printf(" ***************************** n"); printf(" 1.查看学生信息 n"); printf(" 2.添加学生信息 n"); printf(" 3.删除学生信息 n"); printf(" 4.修改学生信息 n"); printf(" 5.保存学生信息 n"); printf(" 6.刷新学生信息 n"); printf(" 0.退出系统 n"); }
四 实现增加学生的功能
void creat_node(LinkList *L) { char name; LinkList *node=NULL; LinkList *temp=L->next; //作为链表连接的中间点 node=(LinkList *)malloc(sizeof(LinkList)); //分配内存 if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); printf("n请输入学生序号:"); scanf("%d",&node->data.number); printf("n请输入学生名:"); scanf("%s",node->data.name); printf("n请输入学生成绩:"); scanf("%d",&node->data.score); printf("n请输入学生年龄:"); scanf("%d",&node->data.age); L->next=node; node->next=temp; }
五 显示学生信息
void show_student(LinkList *L) { LinkList *p=L->next; int i=0; printf("n ************************** n"); printf(" 学生信息 n"); printf(" ************************** n"); printf(" 序号 姓名 成绩 年龄 n"); while(p) { printf(" %d %s %d %d n",p->data.number,p->data.name,p->data.score,p->data.age); i++; p=p->next; } }
六 删除学生
可以选择
1、按序号删除。
2、按姓名删除。
void delete_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp,*pre; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.按序号删除!"); printf("n 2.按姓名删除!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) //根据输入的序号找到学生并删除 { printf("n 请输入要删除的学生序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { pre=temp; temp=temp->next; } if(temp->data.number==number) { pre->next=temp->next; free(temp); } else { printf("n 没有所要删除的学生序号!"); } } else if(x==2) //根据输入的姓名找到学生并删除 { printf("n 请输入要删除的学生名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { pre=temp; temp=temp->next; } if(strcmp(temp->data.name,name)==0) { pre->next=temp->next; free(temp); } else { printf("n 没有要删除的学生姓名!"); } } }
七 修改学生信息
首先找到学生,然后对找到的学生信息进行修改。
可以选择按序号和按姓名来找学生。
找到学生后,可以选择修改学生的任意一项信息。
void modify_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.知道要修改学生的序号!"); printf("n 2.知道要修改学生的名字!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) { printf("n 请输入要修改学生的序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { temp=temp->next; } if(temp->data.number==number) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的序号!"); } } else if(x==2) { printf("n 请输入要修改学生的名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { temp=temp->next; } if(strcmp(temp->data.name,name)==0) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的姓名!"); } } printf("n ************************"); printf("n 姓名:%s 序号:%d 成绩:%d 年龄:%d",temp->data.name,temp->data.number,temp->data.score,temp->data.age); do{ printf("n 请选择:"); printf("n 1.修改序号!"); printf("n 2.修改名字!"); printf("n 3.修改成绩!"); printf("n 4.修改年龄!"); printf("n 请输入选择:"); scanf("%d",&x); }while(x<1 || x>4); if(x==1) { printf("n 请输入修改后的序号:"); scanf("%d",&temp->data.number); } if(x==2) { printf("n 请输入修改后的名字:"); scanf("%s",temp->data.name); } if(x==3) { printf("n 请输入修改后的成绩:"); scanf("%d",&temp->data.score); } if(x==4) { printf("n 请输入修改后的年龄:"); scanf("%d",&temp->data.age); } }
八 保存到文件
void save(LinkList *L) { FILE *fp; int i=0; LinkList *temp; temp=L->next; if((fp=fopen("student.txt","a"))==NULL) { printf("n 无法打开文件!"); exit(1); } while(temp!=NULL) { i++; fprintf(fp,"%d %s %d %d n",temp->data.number,temp->data.name,temp->data.score,temp->data.age); printf("n 第%d个已经保存!",i); temp=temp->next; } fclose(fp); }
九 从文件中恢复
void refresh(LinkList *L) { FILE *fp; LinkList *node=NULL; LinkList *temp=L->next; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); fp=fopen("student.txt","r"); if(fp==NULL) { printf("n 无法打开文件!"); exit(1); } while(!feof(fp)) { fscanf(fp,"%d %s %d %d",&node->data.number,node->data.name,&node->data.score,&node->data.age); L->next=node; node->next=temp; temp=node; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); } printf("n 已经成功刷新学生信息!"); }
十 主函数
主函数中先创建一个头节点(不保存学生信息,便于操作空链表),然后进入主菜单,功能选择模块被我独立成一个函数,代码在主函数后面。
void main() { int i; LinkList *L=NULL; L=(LinkList *)malloc(sizeof(LinkList)); if(L==NULL) { printf("分配头节点内存出错!"); exit(1); } memset(L,0,sizeof(LinkList)); L->next=NULL; int stop=1; while(1) { meum(); choice(&stop,L); if(stop==0) break; printf("n 下一步操作:"); printf("n 1.返回主界面"); printf("n 2.退出系统"); printf("n 请输入操作:"); scanf("%d",&i); if(i==2) break; } } void choice(int *stop,LinkList *L) { int num; printf("nn 请输入菜单选项:"); scanf("%d",&num); switch (num) { case 0: *stop=0; break; case 1: show_student(L); break; case 2: creat_node(L); break; case 3: delete_student(L); break; case 4: modify_student(L); break; case 5: save(L); break; case 6: refresh(L); break; default: printf(" 请在0-6中间选择n"); } }
十一 优化建议
上面有一些写法可以进行优化的,但是因为这只是一个小项目没必要分那么多函数(分了引用次数也十分有限),并且这样更符合我的思路(一功能一模块),就没有进行优化。可以优化的如下:
1、将有复用的代码段独立写成函数,减少代码函数,例如选择和分配节点空间那里独立成函数。
2、将部分较长的函数进行功能分割,便于阅读。
十二 扩展建议
一、增加排序功能。
二、增加代码修改后写回文件时的检验是否修改的功能。
三、扩展界面。
十四 全部代码
#include<stdio.h> #include<stdlib.h> #include<string.h> struct student { char name[10]; int score; int number; int age; }; struct LNode { struct student data; struct LNode *next; }; typedef struct LNode LinkList; void meum(); void choice(int *stop,LinkList *L); void creat_node(LinkList *L); void show_student(LinkList *L); void delete_student(LinkList *L); void modify_student(LinkList *L); void save(LinkList *L); void refresh(LinkList *L); void main() { int i; LinkList *L=NULL; L=(LinkList *)malloc(sizeof(LinkList)); if(L==NULL) { printf("分配头节点内存出错!"); exit(1); } memset(L,0,sizeof(LinkList)); L->next=NULL; int stop=1; while(1) { meum(); choice(&stop,L); if(stop==0) break; printf("n 下一步操作:"); printf("n 1.返回主界面"); printf("n 2.退出系统"); printf("n 请输入操作:"); scanf("%d",&i); if(i==2) break; } } void choice(int *stop,LinkList *L) { int num; printf("nn 请输入菜单选项:"); scanf("%d",&num); switch (num) { case 0: *stop=0; break; case 1: show_student(L); break; case 2: creat_node(L); break; case 3: delete_student(L); break; case 4: modify_student(L); break; case 5: save(L); break; case 6: refresh(L); break; default: printf(" 请在0-6中间选择n"); } } void meum() { printf("n ***************************** n"); printf(" 学生信息管理系统 n"); printf(" ***************************** n"); printf(" 系统菜单功能 n"); printf(" ***************************** n"); printf(" 1.查看学生信息 n"); printf(" 2.添加学生信息 n"); printf(" 3.删除学生信息 n"); printf(" 4.修改学生信息 n"); printf(" 5.保存学生信息 n"); printf(" 6.刷新学生信息 n"); printf(" 0.退出系统 n"); } void creat_node(LinkList *L) { char name; LinkList *node=NULL; LinkList *temp=L->next; //作为链表连接的中间点 node=(LinkList *)malloc(sizeof(LinkList)); //分配内存 if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); printf("n请输入学生序号:"); scanf("%d",&node->data.number); printf("n请输入学生名:"); scanf("%s",node->data.name); printf("n请输入学生成绩:"); scanf("%d",&node->data.score); printf("n请输入学生年龄:"); scanf("%d",&node->data.age); L->next=node; node->next=temp; } void show_student(LinkList *L) { LinkList *p=L->next; int i=0; printf("n ************************** n"); printf(" 学生信息 n"); printf(" ************************** n"); printf(" 序号 姓名 成绩 年龄 n"); while(p) { printf(" %d %s %d %d n",p->data.number,p->data.name,p->data.score,p->data.age); i++; p=p->next; } } void delete_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp,*pre; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.按序号删除!"); printf("n 2.按姓名删除!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) //根据输入的序号找到学生并删除 { printf("n 请输入要删除的学生序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { pre=temp; temp=temp->next; } if(temp->data.number==number) { pre->next=temp->next; free(temp); } else { printf("n 没有所要删除的学生序号!"); } } else if(x==2) //根据输入的姓名找到学生并删除 { printf("n 请输入要删除的学生名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { pre=temp; temp=temp->next; } if(strcmp(temp->data.name,name)==0) { pre->next=temp->next; free(temp); } else { printf("n 没有要删除的学生姓名!"); } } } void modify_student(LinkList *L) { int x=0; int number; char name[10]; LinkList *temp; temp=L->next; while(1) { printf("n 请选择:"); printf("n 1.知道要修改学生的序号!"); printf("n 2.知道要修改学生的名字!"); printf("n 请输入选择:"); scanf("%d",&x); if(x==1 || x==2) break; else printf("n 输入错误,请重新输入!"); } if(x==1) { printf("n 请输入要修改学生的序号:"); scanf("%d",&number); while(temp->data.number!=number && temp->next!=NULL) { temp=temp->next; } if(temp->data.number==number) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的序号!"); } } else if(x==2) { printf("n 请输入要修改学生的名字:"); scanf("%s",name); while(strcmp(temp->data.name,name)!=0 && temp->next!=NULL) { temp=temp->next; } if(strcmp(temp->data.name,name)==0) { printf("n 已经找到要修改学生的信息!"); } else { printf("n 没有要修改学生的姓名!"); } } printf("n ************************"); printf("n 姓名:%s 序号:%d 成绩:%d 年龄:%d",temp->data.name,temp->data.number,temp->data.score,temp->data.age); do{ printf("n 请选择:"); printf("n 1.修改序号!"); printf("n 2.修改名字!"); printf("n 3.修改成绩!"); printf("n 4.修改年龄!"); printf("n 请输入选择:"); scanf("%d",&x); }while(x<1 || x>4); if(x==1) { printf("n 请输入修改后的序号:"); scanf("%d",&temp->data.number); } if(x==2) { printf("n 请输入修改后的名字:"); scanf("%s",temp->data.name); } if(x==3) { printf("n 请输入修改后的成绩:"); scanf("%d",&temp->data.score); } if(x==4) { printf("n 请输入修改后的年龄:"); scanf("%d",&temp->data.age); } } void save(LinkList *L) { FILE *fp; int i=0; LinkList *temp; temp=L->next; if((fp=fopen("student.txt","a"))==NULL) { printf("n 无法打开文件!"); exit(1); } while(temp!=NULL) { i++; fprintf(fp,"%d %s %d %d n",temp->data.number,temp->data.name,temp->data.score,temp->data.age); printf("n 第%d个已经保存!",i); temp=temp->next; } fclose(fp); } void refresh(LinkList *L) { FILE *fp; LinkList *node=NULL; LinkList *temp=L->next; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); fp=fopen("student.txt","r"); if(fp==NULL) { printf("n 无法打开文件!"); exit(1); } while(!feof(fp)) { fscanf(fp,"%d %s %d %d",&node->data.number,node->data.name,&node->data.score,&node->data.age); L->next=node; node->next=temp; temp=node; node=(LinkList *)malloc(sizeof(LinkList)); if(node==NULL) { printf("分配普通节点内存出错!"); exit(1); } memset(node,0,sizeof(LinkList)); } printf("n 已经成功刷新学生信息!"); }
-
c语言链表学生管理系统相关问题请教
2015-11-29 14:52:34要做课程作业了,就学着网上模版写了个链表学生信息系统,但我想分成老师-学生两个登陆模块。思路如下: mian()中设置ahead结构体指针。 老师模块完成学生成绩的增删改查排序(借鉴网上的已完成)。。老师模块结束后... -
C语言链表实现图书管理系统
2021-01-01 13:44:29之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的。在动手编码之前,你需要理清自己的思路。首先,需要确定图书馆里系统中... -
自己写的C语言写的学生信息管理系统
2009-03-21 00:40:14C语言写的,用到了链表和文件的功能,做到的容错功能,很好用 -
(小白练习)C语言:用链表实现学生信息管理
2020-08-03 12:58:02由于工作原因很久没有写博客了,今天用链表这种数据结构写了一个学生信息管理系统,我并没有写链表的释放,希望伙伴们能自己研究研究,后期我会把释放补上。 test.c #include <stdio.h> #include "stu_data.h...由于工作原因很久没有写博客了,今天用链表这种数据结构写了一个学生信息管理系统,我并没有写链表的释放,希望伙伴们能自己研究研究,后期我会把释放补上。
test.c#include <stdio.h> #include "stu_data.h" #include <string.h> #include <stdlib.h> int main() { linklist sql; char choose, sel_name[20] = {}; int id, flag = 1; sql = stu_sreate(); main_menu(); while (flag) { choose = getc(stdin); if (choose == 49) { data_l stu_data; stu_data = stu_input(); stu_insert(sql, stu_data); free(stu_data); printf("请选择业务代号:"); } else if (choose == 50) { printf("请输入要删除的学员名字:"); scanf("%s", sel_name); stu_delete(sql, sel_name); printf("请选择业务代号:"); } else if (choose == 51) { printf("请输入要修改的学员id:"); scanf("%d", &id); stu_update(sql, id); printf("请选择业务代号:"); } else if (choose == 52) { printf("请输入要查询的学员名字:"); scanf("%s", sel_name); stu_select(sql, sel_name); printf("请选择业务代号:"); } else if (choose == 53) { stu_show(sql); printf("请选择业务代号:"); } else if (choose == 54) { main_menu(); printf("请选择业务代号:"); } else if (choose == 42) { flag = 0; } else { continue; } } return 0; }
stu_data.c
#include <stdlib.h> #include <stdio.h> #include "stu_data.h" #include <string.h> /* *主界面菜单 ***/ int main_menu() { printf("/***************菜单*************/\n"); printf("1、添加成员\t\t2、删除成员\n"); printf("3、修改成员\t\t4、查找成员\n"); printf("5、显示所有成员\t\t6、显示菜单\n"); printf("/********************************/\n"); return 0; } /* *创建链表 ***/ linklist stu_sreate() { linklist stu_l; stu_l = (linklist)malloc(sizeof(linknode)); if (stu_l == NULL) { printf("stu_sreate:malloc is fail\n"); return NULL; } stu_l->data = (data_l)malloc(sizeof(data_n)); if (stu_l == NULL) { printf("stu_sreate:malloc is fail\n"); return NULL; } stu_l->data->id = 0; stu_l->data->age = 0; memset(stu_l->data->name, 0, sizeof(stu_l->data->name)); memset(stu_l->data->telephone, 0, sizeof(stu_l->data->telephone)); stu_l->next = NULL; return stu_l; } /* *插入数据 ***/ int stu_insert(linklist sql, data_l value) { linklist stu_n, stu_l; stu_l = sql; stu_n = (linklist)malloc(sizeof(linknode)); if (stu_n == NULL) { printf("stu_sreate:malloc is fail\n"); return -1; } stu_n->data = (data_l)malloc(sizeof(data_n)); if (stu_n == NULL) { printf("stu_sreate:malloc is fail\n"); return -1; } while (stu_l->next) { stu_l = stu_l->next; } stu_l->next = stu_n; stu_n->data->id = value->id; stu_n->data->age = value->age; strcpy(stu_n->data->name, value->name); strcpy(stu_n->data->telephone, value->telephone); stu_n->next = NULL; return 0; } /* *学生信息输入 ***/ data_l stu_input() { data_l stu_n; stu_n = (data_l)malloc(sizeof(data_n)); if (stu_n == NULL) { printf("stu_input:malloc is fail\n"); return NULL; } int id = 0, age = 0; char name[20] = {}, telephone[20] = {}; printf("请输入学生ID:\n"); scanf("%d", &id); printf("请输入学生姓名:\n"); scanf("%s", name); printf("请输入学生年龄:\n"); scanf("%d", &age); printf("请输入学生电话:\n"); scanf("%s", telephone); stu_n->id = id; stu_n->age = age; strcpy(stu_n->name, name); strcpy(stu_n->telephone, telephone); return stu_n; } /* *显示所有数据 **/ int stu_show(linklist sql) { if (sql == NULL) { printf("shu_show:linklist is empty\n"); return -1; } linklist stu_l; stu_l = sql; printf("---------------------------------\n"); printf("|ID\t|姓名\t|年龄\t|电话\t|\n"); printf("---------------------------------\n"); while (stu_l->next) { printf("|%d\t|%s\t|%d\t|%s\t|\n", stu_l->next->data->id, stu_l->next->data->name, stu_l->next->data->age, stu_l->next->data->telephone); printf("---------------------------------\n"); stu_l = stu_l->next; } return 0; } /* *按名字删除人员信息 ***/ int stu_select(linklist sql, char *name) { if (sql == NULL) { printf("stu_delete:parameter is errror\n"); return -1; } linklist stu_l; stu_l = sql; while (stu_l->next) { if (strcmp(name, stu_l->next->data->name) == 0) { printf("---------------------------------\n"); printf("|ID\t|姓名\t|年龄\t|电话\t|\n"); printf("---------------------------------\n"); printf("|%d\t|%s\t|%d\t|%s\t|\n", stu_l->next->data->id, stu_l->next->data->name, stu_l->next->data->age, stu_l->next->data->telephone); printf("---------------------------------\n"); break; } stu_l = stu_l->next; } return 0; } /* *按名字删除个人信息 ***/ int stu_delete(linklist sql, char *name) { if (sql == NULL) { printf("stu_delete:parameter is errror\n"); return -1; } linklist stu_l, stu_d; stu_l = sql; while (stu_l->next) { if (strcmp(name, stu_l->next->data->name) == 0) { stu_d = stu_l->next; stu_l->next = stu_l->next->next; free(stu_d); break; } stu_l = stu_l->next; } return 0; } /* *按id修改信息 **/ int stu_update(linklist sql, int id) { if (sql == NULL) { printf("stu_delete:parameter is errror\n"); return -1; } linklist stu_l; stu_l = sql; char name[20] = {}, telephone[20] = {}; int age = 0; while (stu_l->next) { if (stu_l->next->data->id == id) { printf("请输入修改的姓名:\n"); scanf("%s", name); printf("请输入%s的年龄:\n", name); scanf("%d", &age); printf("请输入%s的电话:\n", name); scanf("%s", telephone); strcpy(stu_l->next->data->name, name); strcpy(stu_l->next->data->telephone,telephone); stu_l->next->data->age = age; break; } stu_l = stu_l->next; } return 0; }
stu_data.h
typedef struct stu_data { int id; char name[20]; int age; char telephone[20]; } data_n, *data_l; typedef struct node { data_l data; struct node *next; } linknode, *linklist; int main_menu(); //主界面菜单 linklist stu_sreate(); //创建链表 int stu_insert(linklist sql, data_l value); //插入数据 data_l stu_input(); //学生信息输入 int stu_show(linklist sql); //显示所有数据 int stu_select(linklist sql, char *name); //按名字查询人员信息 int stu_delete(linklist sql,char *name); //按名字删除个人信息 int stu_update(linklist sql,int id); //按id修改信息
运行结果
这个程序还有很多没有完善的地方,大家可以一起研究哈 -
Linux环境下C语言用链表多文件方式编写学生信息管理系统
2020-04-06 15:42:28Linux系统下的学生信息管理系统 首先要有一个链表,用来记录学生的姓名/学号/各科成绩/总分等信息。然后将链表的操作函数一起写在头文件中。 vi StuList.h//编写头文件 1 #ifndef STULIST_H 2 #define STULIST_H 3 ...Linux系统下的学生信息管理系统
代码功能:区分教师、学生登录两种模式,教师登录需要密码验证,可以进行学生信息的添加、删除、修改、排序、查找、打印、退出等功能,学生登录不需要密码验证,但只能进行查询操作。
首先要有一个链表,用来记录学生的姓名/学号/各科成绩/总分等信息。然后将链表的操作函数一起写在头文件中。vi StuList.h //编写头文件
#ifndef STULIST_H #define STULIST_H typedef struct Node{ int id; char name[32]; double yu; double shu; double ying; double sum; struct Node * next; }node_t; int len(node_t *p);//求已记录学生的数量 int add(node_t *p,node_t* n);//增加学员 void show(node_t* p);//打印所有的学员数据 int del(node_t* p,int id);//删除学员 int seek(node_t* p,char* name);//查找学员 //void seek(node_t* p,int id);//查找学员 int keep(node_t* p,node_t* n);//修改学员信息 int sort(node_t* p,int op);//排序 int ReadFile(node_t* p);//读物文件的记录 int WriteFile(node_t* p);//向文件写入数据 int clear(node_t* p);//清空链表 #endif //STULIST_H在这里插入代码片
vi Ui.h //编写登录界面的头文件
#ifndef UI_H #define UI_H void initUi();//开始界面 void AddUi();//增加学员界面 void DateUi();//数据显示界面 void DelUi();//删除界面 void SortUi();//排序界面 void QuitUi();//退出界面 #endif //UI_H
vi StuList.c //编写StuList源文件
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "StuList.h" int len(node_t *p)//求已记录学生的数量 { int size = 0; while(p->next!=NULL){ p=p->next; size++; } return size; } int add(node_t *p,node_t* n)//增加学员 { //循环便利链表找到尾节点 while(p->next!=NULL){ p=p->next; } n->next = NULL; p->next = n; } void show(node_t* p)//打印所有的学员数据 { while(p->next!=NULL){ p = p->next; printf("%d\t%s\t%lg\t%lg\t%lg\t%lg\n",p->id,p->name,p->ying, p->yu,p->shu,p->sum); } } int del(node_t* p,int id)//删除学员 { node_t* p1 = p;//记录上一个节点 while(p->next!=NULL){ p1 = p; p = p->next; if(p->id == id){ p1->next = p->next; free(p); p = NULL; return 0; } } return -1; } int seek(node_t* p,char* name)//查找学员 { int i = -1; while(p->next!=NULL){ p=p->next; if(strcmp(p->name,name)==0){ printf("%s\t的学号是%d\t,英语成绩为%lg\t语文成绩为%lg\t> 数学成绩为%lg\t总分为%lg\n",p->name,p->id,p->ying,p->yu,p->shu,p->su m); i = 0; } } return i; } /*void seek(node_t * p, int id){ while(p->next != NULL){ p = p->next; if(p->id == id){ printf("%d\t%s\t%lg\t%lg\t%lg\t%lg\n",p->id,p->name,p->y ing,p->yu,p->shu,p->sum); } } } */ int keep(node_t* p,node_t* n)//修改学员信息 { while(p->next!=NULL){ p=p->next; if(p->id==n->id){ n->next = p->next; *p = *n; } } } int SortId(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(p1->id<p->id){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int SortName(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(strcmp(p1->name,p->name)==1){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int SortYu(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(p1->yu > p->yu){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int SortShu(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(p1->shu > p->shu){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int SortYing(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(p1->ying > p->ying){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int SortSum(node_t* p){ node_t* p1 = p; while(p->next!=NULL){ p=p->next; p1 = p; while(p1->next!=NULL){ p1 = p1->next; if(p1->sum > p->sum){ node_t tmp = *p; *p = *p1; *p1 = tmp; node_t* p2 = p->next; p->next = p1->next; p1->next = p2; } } } } int sort(node_t* p,int op)//排序 { switch(op){ case 1: SortId(p); break; case 2: SortName(p); break; case 3: SortYu(p); break; case 4: SortShu(p); break; case 5: SortYing(p); break; case 6: SortSum(p); break; } } int ReadFile(node_t* p)//读物文件的记录 { FILE* fp = fopen("./stu.bin","r"); if(fp!=NULL){ while(p->next!=NULL){ p=p->next; } while(1){ node_t* n = (node_t*)malloc(sizeof(node_t)); if(fread(n,sizeof(node_t),1,fp)==0){ free(n); n = NULL; break; } else{ n->next = NULL; p->next = n; p=p->next;//p=n } } fclose(fp); fp = NULL; } } int WriteFile(node_t* p)//向文件写入数据 { FILE* fp = fopen("./stu.bin","w"); if(fp==NULL) return -1; while(p->next!=NULL){ p = p->next; fwrite(p,sizeof(node_t),1,fp); } fclose(fp); fp = NULL; } int clear(node_t* p)//清空链表 { while(p->next!=NULL){ node_t* p1 = p; p=p->next; p1->next = p->next; free(p); p = p1; } }
到这里学生信息管理系统的代码就完成一大半了,下面将开始编写登录界面的源代码
vi Ui.c
#include <stdio.h> #include <stdlib.h> #include "StuList.h" #include <unistd.h> #include "ui.h" void ReviseUi(); void StuUi(); void AskUi(); node_t head;//头节点 void logo(){ ReadFile(&head); while(1){ int a = 0, b = 0, c = 110; printf("**************学生信息查询系统*************\n"); printf("**1、教师登录 2、学生登录 3、退出**\n"); printf("*******************************************\n"); printf("请选择登录模式:\n"); scanf("%d",&a); switch(a){ case 1: printf("请输入密码\n"); scanf("%d",&b); if(b == c){ ReadFile(&head); initUi(); } break; case 2: StuUi(); break; case 3: QuitUi(); break; } } } void StuUi(){ //学生登录界面 while(1){ system("clear"); printf("*********************\n"); printf("***1 查询 2 退出***\n"); printf("*********************\n"); printf("请输入操作指令:\n"); int i = 0; scanf("%d",&i); scanf("%*[^\n]"); scanf("%*c"); switch(i){ case 1: AskUi(); break; case 2: QuitUi(); break; } } } void initUi(){ //教师登录界面 while(1){ system("clear"); printf("******************** *\n"); printf("***1 增加 2 删除***\n"); printf("***3 显示 4 排序***\n"); printf("***5 修改 6 查找***\n"); printf("***0 退出 ***\n"); printf("******************** *\n"); printf("请输入操作指令:\n"); int i = 0; scanf("%d",&i); scanf("%*[^\n]"); scanf("%*c"); switch(i){ case 1: AddUi(); break; case 2: DelUi(); break; case 3: DateUi(); break; case 4: SortUi(); DateUi(); break; case 5: ReviseUi(); DateUi(); break; case 6: AskUi(); break; case 0: QuitUi(); break; /*case 8: QuitUi(); break;*/ } } } void AddUi(){//增加学员界面3 node_t* n = (node_t*)malloc(sizeof(node_t)); printf("请依次输入学生姓名,id,英语,语文,数学成绩:\n"); scanf("%s",n->name); scanf("%d%lg%lg%lg",&n->id,&n->ying,&n->yu,&n->shu); scanf("%*[^\n]"); scanf("%*c"); n->sum = n->ying+n->yu+n->shu; n->next = NULL; add(&head,n); printf("增加学员成功,点击回车继续\n"); getchar(); } void DateUi(){//数据显示界面 printf("学号\t姓名\t英语\t语文\t数学\t总成绩\n"); show(&head); printf("共有%d个学员信息,点击回车继续\n",len(&head)); getchar(); } void DelUi(){//删除界面 int id = 0; printf("请输入要删除的学生id\n"); scanf("%d",&id); scanf("%*[^\n]"); scanf("%*c"); del(&head, id); printf("删除学员成功,点击回车继续\n"); getchar(); } void SortUi(){//排序界面 int a = 0; printf("请选择排序方式:\n"); printf("1 学号排序 2 姓名排序\n"); printf("3 语文排序 4 数学排序\n"); printf("5 英语排序 6 总分排序\n"); scanf("%d",&a); /*scanf("%*[^\n]"); scanf("%*c");*/ sort(&head, a); printf("排序完成,点击回车继续。\n"); getchar(); } void ReviseUi(){ //信息修改 node_t *n =(node_t *)malloc(sizeof(node_t)) ; printf("以学号为基础,学号不变,其他信息改变。"); printf("请输入要修改的学生姓名\tid\t语文\t数学\t英语成绩\n"); scanf("%s",n->name); scanf("%d%lg%lg%lg",&n->id,&n->yu,&n->shu,&n->ying); n->sum = n->yu + n->shu + n->ying ; keep(&head,n); printf("修改学员成功,点击回车继续。\n"); getchar(); } void QuitUi(){//退出界面 WriteFile(&head); printf("数据正在保存请稍后...\n"); sleep(1); printf("数据保存完成,点击任意键继续\n"); clear(&head); getchar(); exit(-1); } void AskUi(){ //学生查询成绩 char name[32] = {0}; printf("请输入要查询的姓名:\n"); // scanf("%s",name); // scanf("%*[^\n]"); // scanf("%*c"); //fgets(name,31,stdin); gets(name); seek(&head, name); printf("查询结束,点击回车继续。\n"); getchar(); } /*void AskUi(){ int id = 0; printf("请输入要查询的学号:\n"); scanf("%d",&id); scanf("%*[^\n]"); scanf("%*c"); seek(&head, id); printf("查询结束,点击回车继续。\n"); getchar(); }*/
下面只需要编写主程序就可以了
vi main.c
#include "ui.h" //#include "StuList.h" int main(){ logo(); return 0; }
编写完成后就可以编译执行了
gcc main.c ui.c StuList.c
下面展示一下运行结果
试一下,可以的。~
-
用C语言实现学生信息管理系统(单链表),全校软件界最靓的仔!
2019-04-07 15:43:09利用c语言的链表或结构体数组实现学生信息的管理,编写有登录界面的学生信息管理系统,可以实现学生信息的录入,显示,删除,排序,统计,文件读写等功能。 需要C/C++资料的同学请加小编C/C++编程QQ群:825414254... -
C语言学生信息管理系统(动态链表版)
2017-04-30 21:20:10大一上学期的期末作业,只记得当时弄了好长时间。在写代码的过程中,能发现很多问题,错误,折磨人的很。不过也确实学到了好多东西。这其中,有王瑶哥和菲菲姐的热心帮助。... 等以后有机会用C++再写个吧。 -
[图文详解]C语言实现学生成绩管理系统,采用链表结构
2021-01-14 14:34:12相信很多大一的同学在做c语言程序设计期末大作业的时候,都会被这些题目所困扰:学生成绩管理系统、学生信息管理系统、图书借阅管理系统、通讯录、选课系统......上网百度到别人的代码,有的人用C++写,有的人用类C... -
c语言写学生宿舍管理系统
2007-09-24 16:18:00下面是我用c语言在linux环境下写的一个学生宿舍管理系统,数据结构是 用链表。不完整,只有输入学生信息和 计算机给学生自动分配宿舍,没有考虑男女宿舍,我 是 这样想的:对每栋宿舍都作标记,0表示女生宿舍,1表示... -
C语言 学生成绩管理系统(基于文件读写操作及单向动态链表的创建,遍历和排序)
2020-07-19 22:56:54学生成绩管理系统(基于链表和文件读写操作) 本程序为作者的大一下学期的c语言期末作业,如有问题和不足,欢迎大家指出共同探讨。 程序主要实现的功能有:学生信息的录入(动态链表创建),输出所有学生信息(链表遍历),... -
C语言能写的学生管理系统是真是假?以前的是假的,现在才是真的
2018-11-18 23:21:56信息管理系统 简介: 该管理系统分为三个权限:学生,老师,管理员 用双向链表实现,文件储存,有账号密码功能。 密码实现MD5加密,较难破解 实现了链表添加,查找,排序,删除等基本操作 管理员能够管理学生... -
学生信息管理系统(C语言“动态链表”、“文件”实现)第一次用链表和文件写好曲折|ू・ω・` )
2020-06-12 20:58:49第一次用链表和文件来编写学生信息管理系统 (=´ω`=)写的不好请大家见谅✧(≖ ◡ ≖✿ 功能介绍 1.添加学生信息; 2.对学生信息进行排序; 3.删除学生信息; 4.查询学生信息; 5.修改学生信息; 6.输出学生信息; ... -
基于c语言链表上的两种排序操作
2019-12-07 22:55:54这是我在用c语言写学生管理系统时,想将录入的学生信息进行总分排序,所想出的两种排序方法。冒泡排序的大体思路就是先遍历记录结点总数n,然后做n次循环,每次找出链表中总分最高的学生结点,然后将他们依次尾插... -
c语言学生成绩管理系统
2013-03-14 22:27:45一、题目: 学生成绩管理系统 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题... -
c语言数组用户注册登入管理系统_C语言学到什么程度能写贪吃蛇
2020-11-14 07:46:26只会让你写个学生信息管理系统然后你去考二级C语言还可能考不过(话说今天二级出成绩了,附查询链接:成绩查询链接)言归正传,其实C语言学到数组就可以实现贪吃蛇游戏,不用等到数据结构用链表来写。而且,最重要的...