C语言源代码系列-管理系统之学生籍贯信息
创始人
2024-02-02 04:57:58
0
往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息

😜回答

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "dos.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "math.h"
#include "string.h"
/**********************建立链表******************************/
struct hj
{long number;char name[10], address[50];struct hj *next;
};/********************文件操作函数******************************/
FILE* fp;
void openfile(char xx
[20])
{fp = fopen(xx, "ab+");if (fp == NULL)fp = fopen(xx, "wb");
}/**************录入信息函数***********************************/
void hjnew(void)
{system("cls");int n = 0;long xnumber;char xname[10];char xaddress[50];struct hj* head;struct hj* x1, *x2;head = NULL;x2 = NULL;printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                          ★★★录入信息★★★\n");printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");printf("\n                         请输入学号【15字内】:");scanf("%ld", &xnumber);if (xnumber == 0)goto haha;printf("\n                         请输入姓名【10字内】:");scanf("%s", xname);printf("\n                         请输入籍贯【25字内】:");scanf("%s", xaddress);while (xnumber != 0){n++;x1 = (struct hj *)malloc(sizeof(struct hj));x1->number = xnumber;strcpy(x1->name, xname);strcpy(x1->address, xaddress);if (n == 1)head = x1;elsex2->next = x1;x2 = x1;printf("\n                         请输入学号【15字内】:");scanf("%ld", &xnumber);if (xnumber == 0)break;printf("\n                         请输入姓名【10字内】:");scanf("%s", xname);printf("\n                         请输入籍贯【25字内】:");scanf("%s", xaddress);}x2->next = NULL;x1 = head;while (x1 != NULL){openfile("hj.txt");char d[5] = "山西";fwrite(x1, sizeof(struct hj),1,fp);fclose(fp);if (strstr(x1->address, d) != NULL){openfile("schj.txt");fwrite(x1, sizeof(struct hj),1,fp);fclose(fp);}else{openfile("qthj.txt");fwrite(x1, sizeof(struct hj),1,fp);fclose(fp);}x1 = x1->next;}haha: ;
}/*****************************查询函数*************************/
void hjxmselect(void) //按学号方式查询函数
{ssmmx:int n = 0;long hh;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                        ★★★查询编辑信息★★★\n");printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");printf("                         请您输入学号:");scanf("%ld", &hh);if (hh != 0){struct hj* p;struct hj* q = NULL, *head = NULL;fp = fopen("hj.txt", "rb");if (fp == NULL){printf("\n没有记录,请输入记录然后再查询!");getch();goto jjx;}while (!feof(fp)){n++;p = (struct hj *)malloc(sizeof(struct hj));fread(p, sizeof(struct hj),1,fp);if (n == 1)head = p;elseq->next = p;q = p;}q->next = NULL;p = head;while (p != NULL){if (p->number == hh){int a;printf("\n  结 果 →     学号=%ld   姓名=%s", p->number, p->name);printf("\n               地址=%s", p->address);printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");ssmx:scanf("%d", &a);switch (a){void hjedit(struct hj* headd, struct hj* pp);void hjdelete(struct hj* headdd, struct hj* ss);case 1:hjedit(head, p);goto ssmmx;break;case 2:hjdelete(head, p);goto ssmmx;break;case 3: goto ssmmx;case 4: goto jjx;case 5: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto ssmx;}}elsep = p->next;}int iiii = 0;printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");printf("\n                         请选择:");qqqq:scanf("%d", &iiii);switch (iiii){case 1: goto ssmmx;case 2: goto jjx;case 3: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto qqqq;}goto jjx;}jjx: ;
}void hjxhselect(void) //按姓名方式查询函数
{ssmm:int n = 0;char hh[10];system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                        ★★★查询编辑信息★★★\n");printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");printf("                         请您输入姓名:");scanf("%s", hh);if (strcmp(hh, "0") != 0){struct hj* p;struct hj* q = NULL, *head = NULL;fp = fopen("hj.txt", "rb");if (fp == NULL){printf("\n没有记录,请输入记录然后再查询!");getch();goto jjj;}while (!feof(fp)){n++;p = (struct hj *)malloc(sizeof(struct hj));fread(p, sizeof(struct hj),1,fp);if (n == 1)head = p;elseq->next = p;q = p;}q->next = NULL;p = head;while (p != NULL){if (strcmp(p->name, hh) == 0){int a;printf("\n  结 果 →     学号=%ld   姓名=%s  ", p->number, p->name);printf("\n               地址=%s", p->address);printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");ssm:scanf("%d", &a);switch (a){void hjedit(struct hj* headd, struct hj* pp);void hjdelete(struct hj* headdd, struct hj* ss);case 1:hjedit(head, p);goto ssmm;break;case 2:hjdelete(head, p);goto ssmm;break;case 3: goto ssmm;case 4: goto jjj;case 5: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto ssm;}}elsep = p->next;}int iii = 0;printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");printf("\n                         请选择:");qqq:scanf("%d", &iii);switch (iii){case 1: goto ssmm;case 2: goto jjj;case 3: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto qqq;}goto jjj;}jjj: ;
}void hjjgselect(void) //按籍贯方式查询
{yyy:int i;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                      ★★★籍贯方式查询信息★★★\n\n\n");printf("\n                         一  显示所有信息\n");printf("\n                         二  显示山西籍所有信息\n");printf("\n                         三  显示其它籍所有信息\n");printf("\n                         四  自定义查询信息\n");printf("\n                         五  ←返回上级菜单\n");printf("\n                         六  ↓退出程序\n");printf("\n\n                          请选择:");scanf("%d", &i);switch (i){void zdyselect(void);void allselect(char a[8]);case 1:allselect("hj.txt");goto yyy;break;case 2:allselect("schj.txt");goto yyy;break;case 3:allselect("qthj.txt");goto yyy;break;case 4: zdyselect();case 5: break;case 6: exit(0);}
}void zdyselect(void)
{ssmmz:int n = 0, j = 0;char hh[10];system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                        ★★★自定义查询信息★★★\n\n\n");printf("                         请您输入地址关键字:");scanf("%s", hh);if (strcmp(hh, "0") != 0){struct hj* p;struct hj* q = NULL, *head = NULL;fp = fopen("hj.txt", "rb");if (fp == NULL){printf("\n       没有记录,请输入记录然后再查询!");getch();goto jjz;}while (!feof(fp)){n++;p = (struct hj *)malloc(sizeof(struct hj));fread(p, sizeof(struct hj),1,fp);if (n == 1)head = p;elseq->next = p;q = p;}q->next = NULL;p = head;while (p != NULL){if (strstr(p->address, hh) != NULL){int a;j++;printf("\n  结 果 →     学号=%ld   姓名=%s  ", p->number, p->name);printf("\n               地址=%s", p->address);printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询下一条数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:");ssmz:scanf("%d", &a);switch (a){void hjedit(struct hj* headd, struct hj* pp);void hjdelete(struct hj* headdd, struct hj* ss);case 1:hjedit(head, p);goto ssmmz;break;case 2:hjdelete(head, p);goto ssmmz;break;case 3:p = p->next;continue;case 4: goto jjz;case 5: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto ssmz;}p = p->next;}elsep = p->next;}if (j == 0){printf("\n\n\n没有匹配的记录 按任意键继续!");getch();fclose(fp);goto ssmmz;}else{int xx;printf("\n\n查询完毕!    ⑴  继续查询  ⑵  返回上一级菜单  ⑶   退出程序");printf("\n请选择:");scanf("%d", &xx);if (xx == 2)goto jjz;else if (xx == 3)exit(0);}goto ssmmz;jjz: ;}
}void allselect(char a
[8]) //全部查询
{int n = 0;int k = 0;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                        ★★★籍贯方式信息★★★\n\n\n");struct hj* p;struct hj* q = NULL, *head = NULL;fp = fopen(a, "rb");if (fp == NULL){printf("\n对不起,没有记录无法查询!");goto xxxx;}rewind(fp);while (!feof(fp)){n++;p = (struct hj *)malloc(sizeof(struct hj));fread(p, sizeof(struct hj),1,fp);if (n == 1)head = p;elseq->next = p;q = p;}q->next = NULL;struct hj* h1, *p2,*q3,*r4,*s5;h1 = p2 = (hj*) malloc(sizeof(struct hj));p2->next = head;while (p2->next != NULL){q3 = p2->next;r4 = p2;while (q3->next != NULL){if (q3->next->number < p2->next->number)r4 = q3;q3 = q3->next;}if (r4 != p2){s5 = r4->next;r4->next = s5->next;s5->next = p2->next;p2->next = s5;}p2 = p2->next;}head = h1->next->next;free(h1);p = head;while (p != NULL && n > 0){n--;printf("\n学号=%ld  姓名=%s", p->number, p->name);printf("\n地址=%s", p->address);p = p->next;}xxxx:printf("\n→显示完毕←\n⑴ ↑返回上级菜单   ⑵ ↓退出程序 \n请 选 择 :");xxx:scanf("%d", &n);switch (n){case 1: break;case 2: exit(0);default:printf("\n错误的选择,请重新选择:");goto xxx;}
}void hjselect(void) //查询编辑信息函数
{cxbegin:int a;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                        ★★★查询编辑信息★★★\n\n\n");printf("\n                         一    按学号方式查询\n");printf("\n                         二    按姓名方式查询\n");printf("\n                         三    按籍贯方式查询\n");printf("\n                         四    →显示全部信息\n");printf("\n                         五    ←返回上级菜单\n");printf("\n                         请 选 择 查 询 方 式:");cxmm:scanf("%d", &a);switch (a){case 1:hjxmselect();goto cxbegin;break;case 2:hjxhselect();goto cxbegin;break;case 3:hjjgselect();goto cxbegin;break;case 4:allselect("hj.txt");goto cxbegin;break;case 5: break;default:printf("\n错误的选择,请重新选择:");goto cxmm;}
}void hjde(void) //删除界面函数
{cxxbegin:int a;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");printf("\n                          ★★★删除信息★★★\n\n\n");printf("\n                         一    按学号方式删除\n");printf("\n                         二    按姓名方式删除\n");printf("\n                         三    按籍贯方式删除\n");printf("\n                         四    →删除全部信息\n");printf("\n                         五    ←返回上级菜单\n");printf("\n                         请 选 择 删 除 方 式:");cxxmm:scanf("%d", &a);int i = 0;switch (a){case 1:hjxmselect();goto cxxbegin;break;case 2:hjxhselect();goto cxxbegin;break;case 3:zdyselect();goto cxxbegin;break;case 4:fp = fopen("hj.txt", "wb");if (fp != NULL)i++;fp = fopen("schj.txt", "wb");if (fp != NULL)i++;fp = fopen("qthj.txt", "wb");if (fp != NULL)i++;if (i == 3){printf("\n                         全部数据已经删除!!!!!!敲任意键继续");getch();}goto cxxbegin;break;case 5: break;default:printf("\n错误的选择,请重新选择:");goto cxxmm;}
}//==============删除函数接口===============
void hjdelete(struct hj*headdd,struct hj*ss)
{
struct hj *q;char d[5]= "山西";if(headdd==ss)
{headdd = headdd->next;goto gogo;
}
q=headdd;
while(q!=NULL)
{if (q->next->number == ss->number){break;}q = q->next;
}
q->next=ss->next;
gogo:
q=headdd;
fp=fopen("hj.txt", "wb");while(q!=NULL)
{fwrite(q, sizeof(struct hj),1,fp);q = q->next;
}
fclose(fp);
q=headdd;
fp=fopen("schj.txt", "wb");while(q!=NULL)
{if (strstr(q->address, d) != NULL){fwrite(q, sizeof(struct hj),1,fp);}q = q->next;
}
fclose(fp);
q=headdd;
fp=fopen("qthj.txt", "wb");while(q!=NULL)
{if (strstr(q->address, d) == NULL){fwrite(q, sizeof(struct hj),1,fp);}q = q->next;
}
fclose(fp);
}
//===============编辑函数接口==============
void hjedit(struct hj*headd,struct hj*pp)
{int n = 0;struct hj* p, *p1,*p2;char d[5] = "江苏";printf("\n  输 入 →    学号=");scanf("%ld", &pp->number);printf("\n              姓名=");scanf("%s", pp->name);printf("\n              地址=");scanf("%s", pp->address);p = headd;fp = fopen("hj.txt", "wb");while (p != NULL){fwrite(p, sizeof(struct hj),1,fp);p = p->next;}fclose(fp);p1 = headd;fp = fopen("schj.txt", "wb");while (p1 != NULL){if (strstr(p1->address, d) != NULL){fwrite(p1, sizeof(struct hj),1,fp);}p1 = p1->next;}fclose(fp);p2 = headd;fp = fopen("qthj.txt", "wb");while (p2 != NULL){if (strstr(p2->address, d) == NULL){fwrite(p2, sizeof(struct hj),1,fp);}p2 = p2->next;}fclose(fp);
}/**************************主函数***********************/
int main(int argc, char* argv[])
{begin:int t;system("cls");printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n\n\n\n\n");printf("                        一 录入学生籍贯信息\n\n");printf("                        二 查编学生籍贯信息\n\n");printf("                        三 删除学生籍贯信息\n\n");printf("                        四 退出程序\n\n");printf("                        请您选择:");mm:scanf("%d", &t);switch (t){case 1:hjnew();break;case 2:hjselect();break;case 3:hjde();break;case 4: exit(0);default:printf("\n                        错误的选择,请重新选择:");goto mm;}goto begin;return 0;
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...