C语言动态链表实现学生学籍管理系统_第1页
C语言动态链表实现学生学籍管理系统_第2页
C语言动态链表实现学生学籍管理系统_第3页
C语言动态链表实现学生学籍管理系统_第4页
C语言动态链表实现学生学籍管理系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论