版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C语言动态链表实现学生学籍管理系统本文实例为大家分享了C语言利用动态链表实现学生学籍管理系统的具体代码,供大家参考,具体内容如下
/*
*C语言学生信息管理系统(动态链表版)
*作者:cbc
*时间:2025年6月7日
*功能:增添新键数据、修改删除数据、查询统计数据
*平台:windows
#includestdio.h
#includestdlib.h
#includestring.h
#includewindows.h
#defineLENsizeof(structStudent)
structStudent{
charnum[10];
/*学号*/
charname[20];/*姓名*/
charsex[10];
/*性别*/
intage;
/*年龄*/
charphone[12];/*电话*/
charqq[12];
/*QQ号*/
charnativePlace[20];/*籍贯*/
chardepartment[20];/*系别*/
charmajor[20];/*专业*/
charclassName[20];/*班级*/
structStudent*next;
charfilename[30];//全局变量,用来保存要打开的文件名字
/*生成链表*/
structStudent*Creat(intn){
voidmenu_print_in(void);
structStudent*head;
structStudent*p1,*p2;
inti;
system("cls");
for(i=1;in+1;i++){
p1=(structStudent*)malloc(LEN);
menu_print_in();
scanf("%s%s%s%d%s%s%s%s%s%s",p1-num,p1-name,p1-sex,
p1-age,p1-phone,p1-qq,p1-nativePlace,p1-department,p1-major,p1-className);
p1-next=NULL;
if(i==1){
head=p2=p1;
}
else{
p2-next=p1;
p2=p1;
}
}
return(head);
/*数据存盘(wb只写)*/
voidWriteData_wb(structStudent*head){
FILE*fp;
structStudent*p;
if((fp=fopen(filename,"wb"))==NULL)
printf("\aerror!Cannotopenthefile!");
p=head;
while(p!=NULL){
if(fwrite(p,LEN,1,fp)!=1){
printf("写入数据出错\n");
fclose(fp);
return;
}
p=p-next;
}
fclose(fp);
/*数据存盘(ab追加)
voidWriteData_ab(structStudent*head){
FILE*fp;
structStudent*p;
if((fp=fopen(filename,"ab"))==NULL)
printf("\aerror!Cannotopenthefile!");
p=head;
while(p!=NULL){
if(fwrite(p,LEN,1,fp)!=1){
printf("写入数据出错\n");
fclose(fp);
return;
}
p=p-next;
}
fclose(fp);
/*读取数据*/
/*读取数据文件保存到链表中,返回指向此链表头指针*/
structStudent*ReadData(void){
structStudent*head=NULL;
structStudent*p1,*p2;//s=p1;p=p2;
FILE*fp;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("打开文件出错\n");
exit(0);
}
while(!feof(fp)){
if((p1=(structStudent*)malloc(LEN))==NULL){
printf("内存申请出错\n");
fclose(fp);
exit(0);
}
if(fread(p1,LEN,1,fp)!=1){
free(p1);
break;
}
if(head==NULL)
head=p2=p1;
else{
p2-next=p1;
p2=p1;
}
}
fclose(fp);
return(head);
/*【1】全量查询*/
voidPrint_inquire_all(void){
voidmenu_print_out(void);
structStudent*pt;
pt=ReadData();
menu_print_out();
do{
printf("%-10s%6s%8s%4d%13s%11s
%s%s%s%s\n",
pt-num,pt-name,pt-sex,pt-age,pt-phone,pt-qq,pt-nativePlace,pt-department,pt-major,pt-className);
pt=pt-next;
}while(pt!=NULL);
printf("\n\n");
/*【2】学号查询*/
intPrint_inquire_num(){
voidmenu_print_out(void);
structStudent*pt;
charstr_num[10];
printf("◎请输入您要查询的学号:");
scanf("%s",str_num);
pt=ReadData();
menu_print_out();
do{
if(strcmp(pt-num,str_num)==0){
printf("%-10s%6s%8s%4d%13s%11s%s%s%s%s\n",
pt-num,pt-name,pt-sex,pt-age,pt-phone,pt-qq,pt-nativePlace,pt-department,pt-major,pt-className);
printf("\n\n");
return0;
}
pt=pt-next;
}while(pt!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return0;
/*【3】姓名查询*/
intPrint_inquire_name(){
voidmenu_print_out(void);
structStudent*pt;
charstr_name[20];
printf("◎请输入您要查询的姓名:");
scanf("%s",str_name);
pt=ReadData();
menu_print_out();
do{
if(strcmp(pt-name,str_name)==0){
printf("%-10s%6s%8s%4d%13s%11s
%s%s%s%s\n",
pt-num,pt-name,pt-sex,pt-age,pt-phone,pt-qq,pt-nativePlace,pt-department,pt-major,pt-className);
printf("\n\n");
return0;
}
pt=pt-next;
}while(pt!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return0;
/*【4】模糊查询*/
intPrint_inquire_fuzzy(void){
voidmenu_print_out(void);
structStudent*pt;
charstr_find[20];
intm=0;
printf("◎请输入您要查询的关键词:");
scanf("%s",str_find);
pt=ReadData();
menu_print_out();
do{
if(strstr(pt-num,str_find)!=0||strstr(pt-name,str_find)!=0
||strstr(pt-sex,str_find)!=0||strstr(pt-phone,str_find)!=0
||strstr(pt-qq,str_find)!=0){
printf("%-10s%6s%8s%4d%13s%11s%s%s%s%s\n",
pt-num,pt-name,pt-sex,pt-age,pt-phone,pt-qq,pt-nativePlace,pt-department,pt-major,pt-className);
m=1;
}
pt=pt-next;
}while(pt!=NULL);
if(!m)
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return0;
/*【1】修改数据之删除记录*/
intDelete(){
structStudent*pt1,*pt2,*head;
charstr_num[20];
printf("\n◎请输入您要删除的学号信息:");
scanf("%s",str_num);
pt1=ReadData();
pt2=pt1-next;
head=pt1;
while(pt2!=NULL){
if(strcmp(pt1-num,str_num)==0){
WriteData_wb(pt2);
}
elseif(strcmp(pt2-num,str_num)==0){
pt1-next=pt2-next;
WriteData_wb(head);
}
pt2=pt2-next;
pt1=pt1-next;
}
if(pt2!=NULL)
printf("数据库中没有存储您要删除的数据!\n");
printf("\n\n");
return0;
/*【2】修改数据之修改记录*/
intAmend(){
voidmenu_print_in(void);
structStudent*pt1,*pt2,*head;
charstr_num[20];
printf("◎请输入您要修改的学号信息:");
scanf("%s",str_num);
pt1=ReadData();
pt2=pt1-next;
head=pt1;
while(pt2!=NULL){
if(strcmp(pt1-num,str_num)==0){
menu_print_in();
scanf("%s%s%s%d%s%s%s%s%s%s",pt1-num,pt1-name,pt1-sex,
pt1-age,pt1-phone,pt1-qq,pt1-nativePlace,pt1-department,pt1-major,pt1-className);
WriteData_wb(head);
}
elseif(strcmp(pt2-num,str_num)==0){
menu_print_in();
scanf("%s%s%s%d%s%s%s%s%s%s",pt2-num,pt2-name,pt2-sex,
pt2-age,pt2-phone,pt2-qq,pt2-nativePlace,pt2-department,pt2-major,pt2-className);
WriteData_wb(head);
}
pt2=pt2-next;
pt1=pt1-next;
}
if(pt2!=NULL)
printf("数据库中没有存储您要删除的数据!\n");
return0;
/*【3】修改数据之整理数据*/
intNeaten(){
structStudent*first;
structStudent*tail;
structStudent*p_min;
structStudent*min;
structStudent*p;
structStudent*head;
head=ReadData();
first=NULL;
while(head!=NULL){
for(p=head,min=head;p-next!=NULL;p=p-next){
if(strcmp(p-next-num,min-num)0){
p_min=p;
min=p-next;
}
}
if(first==NULL){
first=min;
tail=min;
}
else{
tail-next=min;
tail=min;
}
if(min==head){
head=head-next;
}
else{
p_min-next=min-next;
}
}
if(first!=NULL){
tail-next=NULL;
}
head=first;
WriteData_wb(head);
return0;
/*输入写入数据的数量*/
intCreat_num(void){
intn;
printf("\n◎请输入您此次要添加的数据个数:");
if(scanf("%d",n)!=1){
printf("\aerror!");
}
returnn;
/*选择将要打开的文件*/
intFile_name(){
printf("\n◎请输入您想要打开的文件:");
if(scanf("%s",filename)!=1)
printf("\aerror!");
return0;
/*主菜单*/
voidmenu(void){
voidmenu_add(void);
voidmenu_inquire(void);
voidmenu_amend(void);
inta=0;
printf("
╭════════╮
\n");
printf("╭══════╣学生管理系统V1.0╠══════╮\n");
printf("║
╰════════╯
║\n");
printf("║
【1】添加数据
【3】修改数据
║\n");
printf("║
║\n");
printf("║
【2】查询数据
【4】退出系统
║\n");
printf("║
║\n");
printf("╰══════════════════════╯\n");
printf("◎请输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
while(a!='1'a!='2'a!='3'a!='4'){
printf("error!pleaseinputtherightnumber!\n");
putchar('\a');
getchar();
printf("◎请重新输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
}
switch(a){
case'1':File_name();menu_add();
break;
case'2':File_name();menu_inquire();
break;
case'3':File_name();menu_amend();
break;
case'4':exit(0);
break;
}
getchar();
/*二级菜单之添加数据*/
voidmenu_add(void){
inta=0;
system("cls");
getchar();
printf("
╭════════╮
\n");
printf("╭══════╣
添加数据方式
╠══════╮\n");
printf("║
╰════════╯
║\n");
printf("║【1】新建文件【2】增添数据【3】返回菜单
║\n");
printf("║
║\n");
printf("╰══════════════════════╯\n");
printf("◎请输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
while(a!='1'a!='2'a!='3'){
printf("error!pleaseinputtherightnumber!\n");
putchar('\a');
getchar();
printf("◎请重新输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
}
switch(a){
case'1':WriteData_wb(Creat(Creat_num()));
printf("\n◎新建文件成功且数据已成功保存◎\n");
system("pause");
system("cls");
menu_add();
break;
case'2':WriteData_ab(Creat(Creat_num()));
printf("\n◎数据已成功添加◎\n");
system("pause");
system("cls");
menu_add();
break;
case'3':system("cls");
getchar();
menu();
break;
}
/*二级菜单之查询数据*/
voidmenu_inquire(void){
inta=0;
system("cls");
getchar();
while(1){
system("cls");
printf("
╭════════╮
\n");
printf("╭══════╣
查询数据方式
╠══════╮\n");
printf("║
╰════════╯
║\n");
printf("║
【1】全量查询
【4】模糊查询
║\n");
printf("║
║\n");
printf("║
【2】学号查询
【5】返回菜单
║\n");
printf("║
║\n");
printf("║
【3】姓名查询
║\n");
printf("╰══════════════════════╯\n");
printf("◎请输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
while(a!='1'a!='2'a!='3'a!='3'a!='4'a!='5'a!='6'){
printf("error!pleaseinputtherightnumber!\n");
putchar('\a');
getchar();
printf("◎请重新输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
}
switch(a){
case'1':Print_inquire_all();system("pause");getchar();
break;
case'2':Print_inquire_num();system("pause");getchar();
break;
case'3':Print_inquire_name();system("pause");getchar();
break;
case'4':Print_inquire_fuzzy();system("pause");getchar();;
break;
case'5':system("cls");getchar();menu();
break;
}
}
/*二级菜单之修改数据*/
voidmenu_amend(void){
inta=0;
system("cls");
getchar();
while(1){
system("cls");
printf("
╭════════╮
\n");
printf("╭══════╣
修改数据方式
╠══════╮\n");
printf("║
╰════════╯
║\n");
printf("║
【1】删除记录
【3】整理数据
║\n");
printf("║
║\n");
printf("║
【2】修改记录
【4】返回菜单
║\n");
printf("╰══════════════════════╯\n");
printf("◎请输入功能前的序号进入相应的工具:【
】\b\b");
a=getchar();
while(a!='1'a!='2'a!='3'a!='4'){
printf("error!pleaseinputtherightnumber!\n");
putchar('\a');
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽六安市叶集区就业见习基地及见习岗位29人备考题库(第一批)含答案详解(完整版)
- 2026贵州铜仁市第一批市本级城镇公益性岗位招聘26人备考题库及参考答案详解(夺分金卷)
- 2026广东深圳市龙岗区宝龙街道第一幼教集团招聘4人备考题库带答案详解(基础题)
- 2026招商证券股份有限公司春季校园、暑假实习招聘备考题库含答案详解(研优卷)
- 2026福建福州市鼓楼区第二批公益性岗位招聘6人备考题库及参考答案详解(轻巧夺冠)
- 2026上半年广东江门市开平市医疗卫生事业单位进校园招聘41人备考题库及参考答案详解(典型题)
- 2026云南省机关事务管理局抗战胜利纪念堂管理处招聘编外人员3人备考题库带答案详解(模拟题)
- 2026广东深圳理工附中教师招聘9人备考题库含答案详解(黄金题型)
- 2026四川 巴中市属国企市场化招聘聘职业经理人5人备考题库附参考答案详解(达标题)
- 2026贵州黔东南州食品药品检测中心招聘4人备考题库及完整答案详解1套
- 现在就出发课件
- 院校物业服务教学辅助方案
- 南京写字楼装修施工方案
- 中国农业机械化科学研究院 招聘 笔试
- 高考体检培训课件
- 夏季高温安全生产培训内容课
- 知识产权与保密培训课件
- 基于STM32智能语音台灯设计
- 热处理工安全知识培训
- 荧光分析技术第二章荧光信号机制讲课文档
- 儿童科普宇宙黑洞课件
评论
0/150
提交评论