C语言上机实践报告专业:冶金工程班级:冶金1102姓名:学号:任课教师:张丽华时间:2012年8月-2-一、题目学生信息管理系统设计学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:a)系统以菜单方式工作b)学生信息录入功能(学生信息用文件保存)---输入c)学生信息浏览功能---输出d)查询、排序功能---算法(1)按学号查询(2)按姓名查询e)学生信息的删除与修改(可选项)一、系统功能模块结构图修改学生信息删除学生信息按姓名搜索按学号搜索显示学生信息保存学生信息插入学生信息输入学生信息初始化链表目录选择学生信息管理系统-3-二、数据结构设计及用法说明#includestdio.h#includestdlib.h#includestring.h/*定义结构体用作创建链表*/typedefstructz1{charno[11];//学生学号charname[15];//学生姓名intage;//学生年龄charsex;//学生性别charbirthday[8];//学生出生年月charaddress[20];//学生住址chartel[12];//学生联系电话chare_mail[20];//学生e-mailstructz1*next;//指向下一链表}STUDENT;/*声明用户自定义函数*/STUDENT*init();STUDENT*create();STUDENT*del(STUDENT*h);STUDENT*insert(STUDENT*h);STUDENT*revise(STUDENT*h);voidprint(STUDENT*h);voidsearch1(STUDENT*h);voidsearch2(STUDENT*h);voidsave(STUDENT*h);intmenu_select();voidinputs(char*prompt,char*s,intcount);/*主函数,用于选择功能*/voidmain(){STUDENT*head;head=init();//初始化链表表头for(;;){switch(menu_select()){-4-case0:head=init();break;//初始化case1:head=create();break;//创建列表case2:head=insert(head);break;//插入节点case3:save(head);break;//以文件形式保存case4:print(head);break;//显示case5:search1(head);break;//搜索学号case6:search2(head);break;//搜索姓名case7:head=del(head);break;//删除case8:head=revise(head);break;//修改case9:exit(0);//退出程序}}}/*目录选择函数,返回用户输入的数字*/intmenu_select(){char*menu[]={************菜单************,0.初始化链表,1.输入学生信息,2.插入学生信息,3.保存学生信息,4.显示学生信息,5.按学号查找学生信息,6.按姓名查找学生信息,7.删除指定学号的学生信息,8.修改指定学号的学生信息,9.退出系统};intc,i;for(i=0;i=11;i++)printf(%s\n,menu[i]);do{printf(\n请选择0~9中的某一个选项:\n);scanf(%d,&c);}while(c0||c10);returnc;}/*初始化函数,作用是返回空指针初始化链表*/STUDENT*init(){returnNULL;}-5-/*创建函数,输入学生信息*/STUDENT*create(){STUDENT*h=NULL,*info;for(;;){info=(STUDENT*)malloc(sizeof(STUDENT));if(!info){printf(\n内存不足);returnNULL;}inputs(输入学号:,info-no,11);if(info-no[0]=='@')break;inputs(输入姓名:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.男1.女):);scanf(%s,&info-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入电话:,info-tel,12);inputs(输入E-mail:,info-e_mail,20);info-next=h;h=info;}returnh;}/*输入函数,用于判断输入的字符是否超出程序定义避免数据溢出*/voidinputs(char*prompt,char*s,intcount){charp[255];do{printf(prompt);scanf(%s,p);if(strlen(p)count)printf(\n太长了!\n);}while(strlen(p)count);strcpy(s,p);}-6-/*插入函数,插入学生成绩*/STUDENT*insert(STUDENT*h){STUDENT*p,*q,*info;chars[11];printf(请输入插入点的学生学号\n);scanf(%s,s);printf(\n请输入新的学生信息\n);info=(STUDENT*)malloc(sizeof(STUDENT));inputs(输入学号:,info-no,11);inputs(输入姓名:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.男1.女):);scanf(%s,&info-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入电话:,info-tel,12);inputs(输入E-mail:,info-e_mail,20);info-next=NULL;p=h;q=h;while(strcmp(p-no,s)&&p!=NULL){q=p;p=p-next;}if(p==NULL)if(p==h)h=info;elseq-next=info;elseif(p==h){info-next=p;h=info;}else{info-next=p;q-next=info;}-7-printf(\n已经插入了%s这个学生\n,info-name);return(h);}/*保存函数,以文件的形式保存学生信息*/voidsave(STUDENT*h){FILE*fp;STUDENT*p;charoutfile[50];printf(请输入保存文件的文件名,例如c:\\f1\\te.txt:\n);scanf(%s,outfile);if((fp=fopen(outfile,wb))==NULL){printf(不能打开文件\n);exit(1);}printf(\n正在保存......\n);p=h;while(p!=NULL){fwrite(p,sizeof(STUDENT),1,fp);p=p-next;}fclose(fp);printf(------保存成功!!!------\n);}/*显示函数,显示学生信息*/voidprint(STUDENT*h){inti=0;STUDENT*p;p=h;printf(\n\n\n********************************学生*************************************\n);printf(|学号|姓名|年龄|性别|出生年月|地址|电话|E-mail|\n);printf(|--------|--------|----|----|--------|--------------|-----------|-------------|\n);while(p!=NULL){i++;printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n,p-no,p-name,p-age,p-sex,p-birthday-8-,p-address,p-tel,p-e_mail);p=p-next;}printf(***************************************end*************************************\n);}/*搜索函数,按学号搜索学生信息并显示*/voidsearch1(STUDENT*h){STUDENT*p;chars[11];printf(请输入你要查找的同学的学号\n);scanf(%s,s);p=h;while(strcmp(p-no,s)&&p!=NULL)p=p-next;if(p==NULL)printf('n没有学号为%s的学生\n,s);else{printf(\n\n\n****************************找到了***************************************\n);printf(|学号|姓名|年龄|性别|出生年月|地址|电话|E-mail|\n);printf(|--------|--------|----|----|--------|--------------|-----------|-------------|\n);printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail);printf(***********************************end*****************************************\n);}}/*搜索函数,按姓名搜索学生信息并显示*/voidsearch2(STUDENT*h){STUDENT*p;chars[15];printf(请输入你要查找的同学的姓名\n);scanf(%s,s);p=h;-9-while(strcmp(p-name,s)&&p!=NULL)p=p-next;if(p==NULL)printf('n没有姓名为%s的学生\n,s);else{printf(\n\n\n*******************************找到了************************************\n);printf(|学号|姓名|年龄|性别|出生年月|地址|电话|E-mail|\n);printf(|--------|--------|----|----|--------|--------------|-----------|-------------|\n);printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail);printf(**************************************end**************************************\n);}}/*删除函数,