1、 数据结构课程设计学生信息管理系统C语言编写 仅供参考:#include#includestdlib。h#includeincludeconio。h#define LEN sizeof(LNode)typedef struct LNode/用于存放学生信息节点int stuNumber; char telenum50;int age;char chass50;char deptName50;/char zhuanYe50;char adress50;/char name20;struct LNode next;LNode,Link;/*创建链表结点*Link createLink(Link L
2、) /初始化定义函数,声明变量void inserStu(Link L,Link Elem);/定义插入函数int count(Link L); int temp;temp=count(L);printf(节点个数为d:n”,temp);Link p;int num=1, stuNumber;char telenum50;char name20;int age; / char deptName50;char adress50; char zhuanYe50;/char chass50;/开始输出学生信息 while(1)printf(请输入学生的信息:学号,姓名,年龄,班级,院系,专业,家庭住
3、址,电话号码n”); printf(学号输入负数结束!n);printf(”请输入学号d: ,num); scanf(”10d”,&stuNumber);if(stuNumber0) break; printf(”请输入姓名%d: ”,num); getchar();gets(name);printf(”请输入年龄d: ,num); scanf(d”,&age); printf(”请输入班级%d: ”,num);getchar(); gets(chass); printf(”请输入电话号码: ,num);getchar();gets(telenum); / printf(”请输入院系d: ”,
4、num); getchar(); gets(deptName);*/ if(stuNumber=0)p=(Link)malloc(LEN);p-stuNumber=stuNumber; strcpy(pchass,chass); / strcpy(p-deptName,deptName);/p-age=age;strcpy(p-telenum,telenum);strcpy(pname,name);/插入新结点inserStu(L,p); num+;return (L);/*打印头结点为L的学生记录*void printList(Link L) printf(”n*学号,姓名,年龄,班级,电话
5、号码*n”);printf(n 学号 姓名 年龄 专业班级 电话号码 n”);int n=1;Link p=L;int count(Link L); int temp;temp=count(L);/结点个数:if(temp=0)printf(系统中没有元素n”);/判断学生管理系统中有无信息 else while(p-next!=NULL) printf(2d -9d”,n,pnextstuNumber); printf(%-8s 5d 12s s n,p-next-name, pnext-age,pnext-chass,pnexttelenum/pnext-deptName/);/首个字符打
6、印不出来 p= pnext; n+;printf(n*n);return;/*插入学生信息*void inserStu(Link L,Link Elem) Link prior(Link L,Link p);Link p=Lnext;/*% while(p!=NULLElemstuNumber=p-stuNumber) if(pstuNumber=ElemstuNumber) printf(重复输入学号,输入失败!);return ; p=pnext; /确定Elem的插入位置if(p=NULL) p=prior(L,p);Elemnext=NULL;pnext=Elem;/若为空表,插入到头
7、结点之后 else p=prior(L,p);Elem-next=pnext;pnext=Elem; /*找到当前地址元素的前一元素的地址*Link prior(Link L,Link p)if(Lnext=NULL)return(L);Link p_prior=L; while(p_prior-next!=p) p_prior= p_priornext ; return (p_prior);/*8按学号查询学生信息*int searchName(Link L,char n)int flag=0;/标志要查找的学生和学生记录中的姓名是否匹配Link p=Lnext;int seat=1; if
8、(L-next=NULL|L=NULL)printf(没有学生信息n”); else while(p!=NULL) if(!strcmp(p-name,n))/比较要查找的姓名是否和当前学生信息所指的姓名匹配 flag=1;/输入姓名匹配 printf(要查找的是第%d位学生n”,seat); printf(”学号是:d 名字:s 年龄:d 班级:s 手机号:sn,p-stuNumber,p-name,p-age,p-chass,ptelenum); p=pnext ;seat+;return flag;/*按学号查找学生信息*int searchNum(Link L,int n)int fl
9、ag=0;/标志要查找的学生和管理信息系统中的学号是否匹配Link p=L-next;int seat=1;if(L-next=NULL)printf(没有学生信息n); else while(p!=NULL) if(pstuNumber=n) if(pstuNumber=n)/比较要查找的学号是否和当前学生信息所指的学号匹配 flag=1;/输入学号匹配 printf(”要查找的是第%d位学生n,seat); printf(”学号是:d 名字:s 年龄:d 班级:s 手机号:sn,p-stuNumber,pname,page,pchass,ptelenum); p=pnext ;seat+;
10、 return flag;/*从通讯录中删除第i个元素*void deleteElem(Link L,int i) Link p=L;int j=0; while(p-nextji-1) p= p-next;j+; if(!(pnext))/判断i时候合法,i不能大于元素的个数,也不能小于等于0 printf(”第d个学生删除失败n,i); return; Link q=pnext; pnext=q-next; free(q);/*按姓名删除学生信息*int deleName(Link L, char n) void deteStu(Link); int flag=0;/判断要删除的学生与系统
11、中的姓名是否匹配 Link p=Lnext; int seat =1; if(Lnext=NULL)printf(”n删除提示:系统中没有元素,删除失败!n”);deteStu( L); else while(p!=NULL) if(!strcmp(pname ,n))/比较名字是否匹配 flag=1; printf(s”,pname ); p=pnext; deleteElem(L,seat);/删除第i个学生的信息 else p=p-next ;seat+; if(flag)printf(”被删除了n”); return flag;/*按学号删除学生信息*int deleNum(Link
12、L,int n) void deteStu(Link);int flag=0;Link p=Lnext ;int seat=1; if(Lnext=NULL) printf(n删除提示:系统中没有元素,删除失败!n);deteStu( L); else while(p!=NULL) if(p-stuNumber=n) flag=1; printf(”%d”,pstuNumber); p=pnext; deleteElem(L,seat); break; p=p-next ; seat+; if(flag) printf(被删除了n); else printf(没有找到学生信息n”); retu
13、rn flag;/*void searchWay1(Link L) void searchMenu(Link L); int searchWay=0;/控制跳出循环,再次选择查询方式 if(searchWay=0) printf(”请输入要查询的学生的学号:n”); int n,s; scanf(%d”,n); s=searchNum(L, n); if(s=0)printf(”查找失败n”); searchWay=1; if(searchWay=1) searchMenu( L); /* void searchWay2(Link L) void searchMenu(Link L); int
14、 searchWay=0;/控制跳出循环,再次选择查询方式 if(searchWay=0) char n20;int flag;printf(请输入要查询的学生姓名n”);char temp2=getchar();gets(n);flag= searchName(L,n);if(flag=0)printf(”查找失败!n);searchWay=1; if(searchWay=1) searchMenu( L); /*8 void searchMenu(Link L) int mainMenu();printf(” * 查询菜单 * n);printf(” * 1 输入学生学号查询学生信息 n)
15、;printf(” 2 输入学生姓名查询学生信息 n);printf(” * 3 返回上级菜单 n);printf( * 查询菜单 * n);printf(”请选择13: ); int menu;scanf(d”,menu); switch(menu) case 1: searchWay1(L);break; case 2: searchWay2(L);break; case 3: break;/跳回主菜单程序 /*更新学生信息模块* void alterStu(Link L)/按学号更新学生信息 int n;printf(”请输入要修改的学生学号:”); scanf(”%d”,n); Lin
16、k p=Lnext; if(p=NULL)printf(学生管理系统没有学生信息!); while(p!=NULL)/循环查找学生信息,如果找到该学号则进入循环体更改学生信息 /* if(pstuNumber=n) int num=1, stuNumber,age; char telenum50; char name20; char chass50; printf(”*更改学生信息*n”); printf(”请输入学生的学号,姓名和电话号码n); printf(请输入学号d: ”,num); scanf(d”,stuNumber); printf(”请输入姓名d: ”,num); getcha
17、r(); gets(name); printf(”请输入年龄%d: ,num); scanf(”d”,age); printf(”请输入班级%d: ,num); getchar(); gets(chass); printf(”请输入电话号码: ,num); getchar(); gets(telenum); page=age; pstuNumber=stuNumber; strcpy(ptelenum,telenum); strcpy(pname,name); strcpy(p-chass,chass);/更新新结点printf(*更改学生信息完毕*n); /* p=pnext; /*保存学生
18、信息模块* void keepStu(Link L) Link p=L-next; FILE fp; if(fp=fopen(student。txt”,r)=NULL)/打开文件,不存在此文件则新建 fp=fopen(”E:测试student.txt”,”w”); fclose(fp); fp=fopen(E:测试student。txt”,a); while(p!=NULL) fprintf(fp,dtstsn”,pstuNumber,pname,ptelenum); p=pnext; fclose(fp); printf(”文件保存成功!n”); /*统计结点个数模块* int count(
19、Link L) int n=0; Link p=L-next; if(p=NULL)printf(不存在学生信息n); while(p!=NULL) p=pnext;n+; return n; /*导入学生信息模块* Link stuEntry() FILE fp; Link p,q ,L; if((fp=fopen(”E:测试student.txt,r)=NULL)/打开文件,不存在此文件则新建 ; L=q=(Link)malloc(LEN); printf(”n学号 姓名 手机号 n); printf(”*n”); while(!feof(fp)) p=(Link)malloc(LEN);
20、 fscanf(fp,”%dtstsn”,&pstuNumber,&p-name,ptelenum); printf(n%dtstsn”,pstuNumber,p-name,ptelenum); qnext=p; q=p; q-next=NULL; fclose(fp); printf(”按任意键结束:”); getch();/返回 return L; /*添加学生信息*void AddStu(Link L) int temp; temp=count(L); printf(”节点个数为d:n”,temp);if(temp=0)createLink(L);/如果没有学生信息则调用初始化函数 cr
21、eateLink(L); /*删除学生菜单*void deteStu(Link L) int flag=0,way,n; printf(”n* 删除菜单 *n); printf(”n选择操作方式* 1:按学号 *n”); printf(” * 2:按姓名 *n); printf(” * 3: 返回主菜单 *n); printf(n请输入删除方式:”);scanf(”%d”,way);if(way1way3)deteStu(L);switch (way)case 1: printf(请输入要删除的学生学号:); scanf(”d”,n); flag= deleNum(L,n);break;cas
22、e 2: char n20; printf(”请输入要删除的学生姓名:); char temp1=getchar(); gets(n); flag=deleName(L,n);break; case 3:break; if(flag)printf(删除成功!n”);deteStu(L); /*主菜单程序* int mainMenu() printf(”n*欢迎使用学生管理信息系统*n”);printf( * 1 输入学生信息 * n”);printf(” * 2 显示学生信息 * * n”);printf(” * 3 查询学生信息 * n”);printf(”* * 4 更新学生信息 * n)
23、;printf(* * 5 添加学生信息 * * n);printf(” * 6 删除学生信息 * * n”);printf(” * 7 保存学生信息 * * n);printf(”* * 8从文件导入学生信息 * * n);printf( * 0 退出管理信息系统 * n);printf(*欢迎使用学生管理信息系统*”); int menu=0; printf(请选择0-8:”); scanf(%d”,&menu); if(menu0&menu8) printf(”输入无效,请正确输入有效序号08:”); scanf(”d”,&menu);return menu; /*main()程序*vo
24、id main() Link L=(Link)malloc(LEN);/在主函数上首先让结构体指针初始化;L-next=NULL;int flag=0;/学生信息是否建立int menu=0;/菜单选项do menu=mainMenu(); switch(menu)/用于调用子菜单 case 1:L=createLink(L);break; case 2:printList(L); break; case 3:searchMenu(L); break; case 4:alterStu(L) ;break; case 5:createLink(L);break; case 6:deteStu( L); break; case 7:keepStu( L); break; case 8:L=stuEntry();break; case 0:return; while(1); /*