学生管理系统(数据结构课程设计之完整代码).doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date学生管理系统(数据结构课程设计之完整代码)学生管理系统(数据结构课程设计之完整代码) 数据结构课程设计学生信息管理系统C语言编写 仅供参考:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.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) /初始化定义函数,声明变量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("请输入学生的信息:学号,姓名,年龄,班级,院系,专业,家庭住址,电话号码n"); printf("学号输入负数结束!n");printf("请输入学号%d: ",num); scanf("%10d",&stuNumber);if(stuNumber<0) 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: ",num); getchar(); gets(deptName);*/ if(stuNumber>=0)p=(Link)malloc(LEN);p->stuNumber=stuNumber; strcpy(p->chass,chass); /* strcpy(p->deptName,deptName);*/ p->age=age;strcpy(p->telenum,telenum);strcpy(p->name,name);/插入新结点inserStu(L,p); num+; return (L);/*打印头结点为L的学生记录*void printList(Link L) printf("n*学号,姓名,年龄,班级,电话号码*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,p->next->stuNumber); printf("%-8s %-5d %-12s %s n",p->next->name, p->next->age,p->next->chass,p->next->telenum/*p->next->deptName*/);/首个字符打印不出来 p= p->next; n+;printf("n*n");return;/*插入学生信息*void inserStu(Link L,Link Elem) Link prior(Link L,Link p);Link p=L->next;/*%* while(p!=NULL&&Elem->stuNumber>=p->stuNumber) if(p->stuNumber=Elem->stuNumber) printf("重复输入学号,输入失败!");return ; p=p->next; /确定Elem的插入位置if(p=NULL) p=prior(L,p);Elem->next=NULL;p->next=Elem;/若为空表,插入到头结点之后 else p=prior(L,p);Elem->next=p->next;p->next=Elem; /*找到当前地址元素的前一元素的地址*Link prior(Link L,Link p)if(L->next=NULL)return(L);Link p_prior=L; while(p_prior->next!=p) p_prior= p_prior->next ; return (p_prior);/*8按学号查询学生信息*int searchName(Link L,char n)int flag=0;/标志要查找的学生和学生记录中的姓名是否匹配Link p=L->next;int seat=1; if(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,p->telenum); p=p->next ;seat+;return flag;/*按学号查找学生信息*int searchNum(Link L,int n)int flag=0;/标志要查找的学生和管理信息系统中的学号是否匹配Link p=L->next;int seat=1;if(L->next=NULL)printf("没有学生信息n"); else while(p!=NULL) if(p->stuNumber<=n) if(p->stuNumber=n)/比较要查找的学号是否和当前学生信息所指的学号匹配 flag=1;/输入学号匹配 printf("要查找的是第%d位学生n",seat); printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%sn",p->stuNumber,p->name,p->age,p->chass,p->telenum); p=p->next ;seat+; return flag;/*从通讯录中删除第i个元素*void deleteElem(Link L,int i) Link p=L;int j=0; while(p->next&&j<i-1) p= p->next;j+; if(!(p->next)/判断i时候合法,i不能大于元素的个数,也不能小于等于0 printf("第%d个学生删除失败n",i); return; Link q=p->next; p->next=q->next; free(q);/*按姓名删除学生信息*int deleName(Link L, char n) void deteStu(Link); int flag=0;/判断要删除的学生与系统中的姓名是否匹配 Link p=L->next; int seat =1; if(L->next=NULL)printf("n删除提示:系统中没有元素,删除失败!n");deteStu( L); else while(p!=NULL) if(!strcmp(p->name ,n)/比较名字是否匹配 flag=1; printf("%s",p->name ); p=p->next; deleteElem(L,seat);/删除第i个学生的信息 else p=p->next ;seat+; if(flag)printf("被删除了n"); return flag;/*按学号删除学生信息*int deleNum(Link L,int n) void deteStu(Link);int flag=0;Link p=L->next ;int seat=1; if(L->next=NULL) printf("n删除提示:系统中没有元素,删除失败!n");deteStu( L); else while(p!=NULL) if(p->stuNumber=n) flag=1; printf("%d",p->stuNumber); p=p->next; deleteElem(L,seat); break; p=p->next ; seat+; if(flag) printf("被删除了n"); else printf("没有找到学生信息n"); return 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 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");printf(" * 2 输入学生姓名查询学生信息 n");printf(" * 3 返回上级菜单 n");printf(" * 查询菜单 * n");printf("请选择1-3: "); 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); Link p=L->next; if(p=NULL)printf("学生管理系统没有学生信息!"); while(p!=NULL)/循环查找学生信息,如果找到该学号则进入循环体更改学生信息 /* if(p->stuNumber=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); getchar(); gets(name); printf("请输入年龄%d: ",num); scanf("%d",&age); printf("请输入班级%d: ",num); getchar(); gets(chass); printf("请输入电话号码: ",num); getchar(); gets(telenum); p->age=age; p->stuNumber=stuNumber; strcpy(p->telenum,telenum); strcpy(p->name,name); strcpy(p->chass,chass);/更新新结点printf("*更改学生信息完毕*n"); /* p=p->next; /*保存学生信息模块* 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,"%dt%st%sn",p->stuNumber,p->name,p->telenum); p=p->next; fclose(fp); printf("文件保存成功!n"); /*统计结点个数模块* int count(Link L) int n=0; Link p=L->next; if(p=NULL)printf("不存在学生信息n"); while(p!=NULL) p=p->next;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); fscanf(fp,"%dt%st%sn",&p->stuNumber,&p->name,&p->telenum); printf("n%dt%st%sn",p->stuNumber,p->name,p->telenum); q->next=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);/如果没有学生信息则调用初始化函数 createLink(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(way<1|way>3)deteStu(L);switch (way)case 1: printf("请输入要删除的学生学号:"); scanf("%d",&n); flag= deleNum(L,n);break;case 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");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(menu<0&&menu>8) printf("输入无效,请正确输入有效序号0-8:"); scanf("%d",&menu);return menu; /*main()程序*void 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