欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

C语言学生学籍管理系统 链表+存储数据到文档

发布时间:2025/5/22 windows 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言学生学籍管理系统 链表+存储数据到文档 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

有勇气的牛排
官方地址:官网:www.920vip.net/

基本原理:利用链表和文件读写实现具有永久存储数据的系统

文件命名:StudentSystem.cpp

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> //创建结构体 struct students {int id;char name[60];char address[60]; };//创建链表struct node {struct students data;struct node *next; };struct node *create_students(); void print_students(struct node *h); void sort_students(struct node *h); void modify_students(struct node *h); void delete_students(struct node *h); void menu();main(){struct node *h=NULL;system("mode con cols=100 lines=30");int x,i=1;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_INTENSITY); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY); do{menu();printf(" 请输入您的选择:");scanf("%d",&x);switch (x){case 1:h=create_students();break;case 2:print_students(h);break;case 3:sort_students(h);break;case 4:modify_students(h);break;case 5:delete_students(h);break;case 6:printf("欢迎下次访问,再见!!!\n");exit(0);break;}}while(x!=5);return 0; }//菜单void menu(){printf("\n\n\n **************************************学生学籍信息管理系统************************************** \n\n");printf(" * * \n\n");printf(" * * \n\n");printf(" * 1--- 学生学籍信息录入 --- * \n\n");printf(" * 2--- 查看学生信息 --- * \n\n");printf(" * 3--- 学生学籍排序 --- * \n\n");printf(" * 4--- 修改学生信息 --- * \n\n");printf(" * 5--- 删除学生信息 --- * \n\n");printf(" * 6--- 退出系统 --- * \n\n\n\n");printf(" ************************************************************************************************ \n\n\n\n");}//一、输入学生学籍信息 struct node *create_students() {FILE *fp;int x,m=1;char nam[60],a[60];struct node *h,*p,*q,*n;system("cls");printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 请输入第%d位学生id(输入-1结束):",m);scanf("%d",&x);getchar();if(x!=-1){printf(" 姓名:");gets(nam);printf(" 地址:");gets(a);}if(x!=-1){h=(struct node*)malloc(sizeof(struct node));h->data.id=x;strcpy(h->data.name,nam);strcpy(h->data.address,a);h->next=NULL;p=h;n=p;}while(x!=-1){m++;printf(" 请输入第%d位学生id(输入-1结束):",m);scanf("%d",&x);getchar();if(x!=-1){printf(" 姓名:");gets(nam);printf(" 地址:");gets(a);}if(x!=-1){q=(struct node*)malloc(sizeof(struct node));q->data.id=x;strcpy(q->data.name,nam);strcpy(q->data.address,a);q->next=NULL;p->next=q;p=p->next;} }//printf("========打印r链表=========\n");//printf("测试%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r链表结束=========\n");//存档//n=n->next;fp=fopen("book.txt","a");if(fp==NULL){printf("文件打开失败\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);return h; }//二、输出所有学生信息 void print_students(struct node *h) {h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r;system("cls");p=h;int id,i=1,j=1,ok;//统计人数 j,k用排序char name_stu[60],address_stu[60];fp=fopen("book.txt","r");if(fp==NULL){printf("文件打开失败");}else{printf("文件打开成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){//printf("\n");//printf("---第%d次循环\n",i);//i++;q=(struct node*)malloc(sizeof(struct node));//printf("内存申请成功\n");strcpy(q->data.name,name_stu);//printf("%s ",q->data.name);strcpy(q->data.address,address_stu);//printf("%s ",q->data.address);q->data.id=id;//printf("%d\n",q->data.id);//printf("------------------------\n");q->next=NULL;p->next=q;p=p->next;//p->next=q;//p=q;}}//p->next=NULL;fclose(fp);r=h;r=r->next;printf("序号 学号 姓名 地址\n");while(r!=NULL){printf("%d:",j);j++;printf(" %d %s %s\n",r->data.id,r->data.name,r->data.address);r=r->next;}printf("输入1查看结束:");scanf("%d",&ok);if(ok==1){system("cls");menu();}}//三、排序功能 思路:读取--修改--保存 void sort_students(struct node *h) {system("cls");//1.读取h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*n;p=h;//q=h;int id,i=0,sort,j,k,x;//x用于排序暂时存储char name_stu[60],address_stu[60],s_name[60],s_address[60];fp=fopen("book.txt","r");if(fp==NULL){printf("文件打开失败");}else{//printf("文件打开成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){//printf("\n");//printf("---第%d次循环\n",i);i++;q=(struct node*)malloc(sizeof(struct node));//printf("内存申请成功\n");strcpy(q->data.name,name_stu);//printf("%s ",q->data.name);strcpy(q->data.address,address_stu);//printf("%s ",q->data.address);q->data.id=id;//printf("%d\n",q->data.id);//printf("------------------------\n");q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//2.修改----->>实现排序r=h; //r为主链表r=r->next;n=r;q=r->next;printf("%d",r->data.id);printf("%d",q->data.id);//printf("总长度为:%d\n",i);while(true){printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 从小到大排序请按1,从大到小排序请按0:");scanf("%d",&sort);if(sort==0 || sort==1){break;}else{printf("您的输入有误"); }}//printf("判断成功\n");//printf("333%d\n",r->data.id);//printf("333%d\n",q->data.id);//从小到大排序if(sort==1){//printf("-----从小到大排序-----\n");for(j=0;j<i-1;j++)//while(r!=NULL){//printf("=========%d==\n",r->data.id);for(k=j+1;k<i;k++)//while(q!=NULL){//printf("--%d-\n",q->data.id);if((r->data.id)>(q->data.id)){x=r->data.id;strcpy(s_name,r->data.name);strcpy(s_address,r->data.address);r->data.id=q->data.id;strcpy(r->data.name,q->data.name);strcpy(r->data.address,q->data.address);q->data.id=x;strcpy(q->data.name,s_name);strcpy(q->data.address,s_address);}q=q->next;}r=r->next;q=r->next;}printf("排序成功\n");}//从大到小排序if(sort==0){printf("-----从大到小排序-----\n");for(j=0;j<i-1;j++)//while(r!=NULL){//printf("=========%d==\n",r->data.id);for(k=j+1;k<i;k++)//while(q!=NULL){//printf("--%d-\n",q->data.id);if((r->data.id)<(q->data.id)){//x=r->data.id;//r->data.id=q->data.id;//q->data.id=x;x=r->data.id;strcpy(s_name,r->data.name);strcpy(s_address,r->data.address);r->data.id=q->data.id;strcpy(r->data.name,q->data.name);strcpy(r->data.address,q->data.address);q->data.id=x;strcpy(q->data.name,s_name);strcpy(q->data.address,s_address);}q=q->next;}r=r->next;q=r->next;}printf("排序成功\n");}//printf("========打印r链表=========\n");//n=r;//printf("测试%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r链表结束=========\n");//排序存档//FILE *fp;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打开失败\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);}//四、===========修改学生信息====== void modify_students(struct node *h) {system("cls");//变量int searchId,x,NewId;// x:选项 searchId:按学号搜 n:新学号 char NewName[60],NewAddress[60];//1.读取文件,并将内容重新放到结构体p中int id;char name_stu[60],address_stu[60],s_name[60],s_address[60];h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*n;p=h;r=p;n=p;fp=fopen("book.txt","r");if(fp==NULL){printf("文件打开失败");}else{//printf("文件打开成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){q=(struct node*)malloc(sizeof(struct node));strcpy(q->data.name,name_stu);strcpy(q->data.address,address_stu);q->data.id=id;q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//printf("结束\n\n");//2.找到对应学生printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 请输入您所要修改学生的ID:");scanf("%d",&searchId);printf("您将选择ID为%d的学生!!!\n",searchId);r=r->next;while(r!=NULL){if(searchId==r->data.id){//初始化变量NewId=r->data.id;strcpy(NewName,r->data.name);strcpy(NewAddress,r->data.address);printf(">>>>>>>>>>>>%s\n",r->data.name);printf(">>>>>>>>>>>>%s\n",r->data.address);while(true){printf(" 请输入您要改的项目(1:学号、2:姓名、3:地址、-1:确认修改):");scanf("%d",&x);getchar();//获取新学号if(x==1){printf(" 请输入新学号:");scanf("%d",&NewId);getchar();printf("\n+++++++++%d\n",NewId);}//获取新姓名if(x==2){printf(" 请输入新姓名:");gets(NewName);printf("\n+++++++++%s\n",NewName);}//获取新地址if(x==3){printf("请输入新地址:");gets(NewAddress);printf("\n+++++++++%s\n",NewAddress);}//确认修改if(x==-1){break;}}//确认修改信息r->data.id=NewId;strcpy(r->data.name,NewName);strcpy(r->data.address,NewAddress);printf("修改成功!!!\n新学号为:%d 新姓名为:%s 新地址为:%s\n",r->data.id,r->data.name,r->data.address);break;}r=r->next;}//存档n=n->next;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打开失败\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp); }//五、删除指定学生信息 void delete_students(struct node *h) {system("cls");//变量int searchId;// x:选项 searchId:按学号搜//1.读取文件,并将内容重新放到结构体p中int id;char name_stu[60],address_stu[60],s_name[60],s_address[60];h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*m,*n,*k;//m:用来切割节点保存前一个节点p=h;r=p;//查询指针m=p;//n=r;//存数据指针fp=fopen("book.txt","r");if(fp==NULL){printf("文件打开失败");}else{//printf("文件打开成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){q=(struct node*)malloc(sizeof(struct node));strcpy(q->data.name,name_stu);strcpy(q->data.address,address_stu);q->data.id=id;q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//2.找到对应学生printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 请输入您所要删除学生的学生号");scanf("%d",&searchId);getchar();//printf("您将选择ID为%d的学生!!!\n",searchId);//r=r->next;//m=r->next;while(r->next!=NULL){//printf("%d ",r->data.id);//printf("%d \n",m->data.id);k=r;r=r->next;if(searchId==r->data.id){//printf("YYYYYYYYYYYYYYYYYYY");k->next=r->next;free(r);r=k->next;break;}}printf(" 删除成功\n");//输出r链表 测试是否修改成功 为存档做准备//n=n->next;//printf("========打印r链表=========\n");//printf("测试%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r链表结束=========\n");//存档n=n->next;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打开失败\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);main();//==扣扣群聊172842597== }

总结

以上是生活随笔为你收集整理的C语言学生学籍管理系统 链表+存储数据到文档的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。