




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除和修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息。系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;★2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。这其中要用到对链表的删除、插入等知识。删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。插入时也要先找到相应结点,再添加。★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。★4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息。二、概要设计系统总体设计框架:对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。系统功能模块图:主菜单主菜单学生形象查询学生信息添加学生信息删除学生信息添加是否保存关闭文件三、详细设计主要功能模块的算法设计思路如下:1、查询通讯录信息(voidchakan())(1)为开辟一个新单元(2)输入查询关键字:(3)读取保存的文件数据输入ASCLL字符:(4)在链表中寻找相应结点;(5)调用输出函数,输出结点信息。2、添加信息函数(voidadd())(1)定义指向结构体变量的指针;(2)移动指针,找到插入结点;(3)在要插入的结点输入信息;(4)调用保存函数,打开文件,保存输入信息。3、删除信息函数(voiddel())(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找要删除的结点;(4)修改链表,删除对应结点。4、修改信息函数(voidxiugai())(1)定义指向结构体变量的指针;(2)读取保存的文件数据输入ASCLL字符:(3)用指针检验链表中是否有记录,若没记录,返回主函数;(4)根据要修改的编号查找对应结点;(5)修改信息;(6)打开文件,保存修改记录。5、保存信息函数(baocun())(1)定义指向结构体变量的指针;(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:(3)用指针检验链表中是否有记录,若没记录,返回主函数:(4)打开文件,保存记录:6、屏幕操作函数(voidstubent187())(1)以一定格式输出所想要的图形:四、主要源程序代码定义变量:(对整个程序定义全局变量)#include""#include""#defineSTUDENTID/*所有STUDENT都用ID来代替*/typedefstructnode/*定义结构体*/{charming[50];/*名字*/charxing[50];/*性别*/charnian[50];/*年龄*/intxuehao;/*学号*/charxibie[50];/*专业*/charsushe[50];/*宿舍号*/charjia[50];/*家庭地址*/structnode*next;}ID;/*学生信息(变量名)*/ID*head=NULL;/*定义一个头指针*/FILE*zhi;/*定义一个文件指针*/主菜单界面:(进入屏幕界面的形式)voidstubent187()/*屏幕格式函数*/{printf("****************************************\n");printf("*学生信息管理系统*\n");printf("**\n");printf("*请选择:1:查看;2:添加;3:删除;*\n");printf("*4:修改;0:退出系统*\n");printf("**\n");printf("*******************************************\n");printf(">>>>>>>>>>>>>输入0~4数字<<<<<<<<<<<<<\n");return;}查看学生信息记录:(对以保存在磁盘文件的学生信息进行查询)voidchakan(){/*查看*/ID*t;t=head;t=(ID*)malloc(sizeof(ID));/*为t开辟一个新单元*/if((zhi=fopen("","rb"))==NULL)printf("没有此文件\n");else{printf("%10s%10s%10s%10s%10s%10s%10s\n","ming","xing","nian","xuehao","eng","sushe","jia");/*输出一个屏幕格式*/while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);/*读取保存的文件数据输入ASCLL字符:*/printf("%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以这形式输出各个学生信息*/t->next=(ID*)malloc(sizeof(ID));t=t->next;}};}添加学生信息记录:()voidadd(){chari;/*添加*/ID*t1,*t2;t1=t2=NULL;loop:t1=(ID*)malloc(sizeof(ID));/*为t1开辟一个新单元*/printf("请输入姓名:");scanf("%s",&t1->ming);/*姓名*/printf("请输入性别:");scanf("%s",&t1->xing);/*性别*/printf("请输入年龄:");scanf("%s",&(t1->nian));/*年龄*/printf("请输入学号:");scanf("%d",&(t1->xuehao));/*学号*/printf("请输入系别:");scanf("%s",&(t1->xibie));/*系别*/printf("请输入宿舍号:");scanf("%s",&(t1->sushe));/*宿舍号*/printf("请输入家庭地址:");scanf("%s",&(t1->jia));/*家庭地址*/t1->next=NULL;if(head==NULL)/*如果头结点为空*/{head=t1;/*t1指向头结点*/t2=t1;}else{t2=head;while(t2->next!=NULL)t2=t2->next;/*没有成立则指向下个结点*/t2->next=t1;}getchar();printf("是否继续添加(Y/N):\n");scanf("%s",&i);/*输入Y/N*/if(i=='y'||i=='Y'){clrscr();gotoloop;/*清屏在循环*/}else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);if(i=='y'||i=='Y')/*是否要保存*/{baocun();/*调用保存*/clrscr();/*清屏*/stubent187();/*调用屏幕函数*/printf("保存成功");}elseif(i=='n'||i=='N'){clrscr();/*清屏*/stubent187();}/*调用屏幕函数*/}return;}删除学生信息操作:(对以存的学生信息进行删除)voiddel(){/*删除*/ID*A,*B;/*定义指针*/chart,i;intxuehao;/*定义整型变量与字符型变量*/A=B=NULL;if((zhi=fopen("","a+"))==NULL)printf("没有此信息文件\n");else{loop:printf("请输入要删除的学生学号:");scanf("%d",&xuehao);while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:*/if(A!=NULL&&A->xuehao!=xuehao)A=A->next;elsebreak;}if(A->xuehao==xuehao){head=A->next;free(*A);printf("成功!\n");printf("是否继续删除(Y/N)");scanf("%s",&i);if(i=='y'||i=='Y'){clrscr();gotoloop;}if(i=='n'||i=='N')printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);if(i=='y'||i=='Y')baocun();elseclrscr();stubent187();}elseprintf("无法找到此编号\n");}}修改学生信息操作:(对保存的学生信息进行修改)voidxiugai(){/*修改*/ID*t1,*t2;/*定义指针*/inti;charxuehao;/*定义整型变量与字符型变量*/t1=head;if((zhi=fopen("","a+"))==NULL)printf("没有此信息文件\n");loop:printf("请输入要修改的学号:");scanf("%s",&xuehao);/*输入编号*/while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:*/if(t1!=NULL&&t1->xuehao!=xuehao)t1=t1->next;elsebreak;}if(t1->xuehao==xuehao){fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);printf("输入名字:");scanf("%s",&t1->ming);/*名字*/printf("输入性别:");scanf("%s",&(t1->xing));/*性别*/printf("输入年龄:");scanf("%s",&(t1->nian));/*年龄*/printf("输入学号:");scanf("%s",&t1->xuehao);/*学号*/printf("输入系别:");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:");scanf("%s",&(t1->jia));/*家庭地址*/printf("成功!\n");printf("是否继续修改(Y/N)");scanf("%d",&i);if(i=='y'||i=='Y'){clrscr();gotoloop;}if(i=='n'||i=='N')printf("是否保存此次修改(Y/N)\n");scanf("%c",&i);if(i=='y'||i=='Y')baocun();elseclrscr();/*清屏*/stubent187();/*调用屏幕函数*/}elseprintf("没有此编号\n");return;}保存添加,删除,修改学生的信息:(操作过后是否保存)baocun()/*保存*/{ID*t=head;/*定义指针*/zhi=fopen("","a+");/*(读写文本)*/while(t!=NULL){fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以zhi为文件指针保存*/t=t->next;}fclose(zhi);/*关闭此文件*/printf("成功!\n");return;}主菜单操作:(选择所需要的操作)main()/*主函数*/{inti;/*定义整形变量i*/stubent187();/*调用屏幕函数*/while(1){scanf("%d",&i);/*输入要执行的操作*/switch(i){case1:chakan();break;/*调用查看函数*/case2:add();break;/*调用添加函数*/case3:del();break;/*调用删除函数*/case4:xiugai();break;/*调用修改函数*/case0:exit(0);/*结束*/default:printf("输入错误,请在此输入\n");continue;}/*输入不是0~4的,则返回*/}}Ⅰ源函数代码:voidchakan(){/*查看*/ID*t;t=head;t=(ID*)malloc(sizeof(ID));/*为t开辟一个新单元*/if((zhi=fopen("","rb"))==NULL)printf("没有此文件\n");else{printf("%10s%10s%10s%10s%10s%10s%10s\n","ming","xing","nian","xuehao","eng","sushe","jia");/*输出一个屏幕格式*/while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);/*读取保存的文件数据输入ASCLL字符:*/printf("%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以这形式输出各个学生信息*/t->next=(ID*)malloc(sizeof(ID));t=t->next;}};}voidadd(){chari;/*添加*/ID*t1,*t2;t1=t2=NULL;loop:t1=(ID*)malloc(sizeof(ID));/*为t1开辟一个新单元*/printf("请输入姓名:");scanf("%s",&t1->ming);/*姓名*/printf("请输入性别:");scanf("%s",&t1->xing);/*性别*/printf("请输入年龄:");scanf("%s",&(t1->nian));/*年龄*/printf("请输入学号:");scanf("%d",&(t1->xuehao));/*学号*/printf("请输入系别:");scanf("%s",&(t1->xibie));/*系别*/printf("请输入宿舍号:");scanf("%s",&(t1->sushe));/*宿舍号*/printf("请输入家庭地址:");scanf("%s",&(t1->jia));/*家庭地址*/t1->next=NULL;if(head==NULL)/*如果头结点为空*/{head=t1;/*t1指向头结点*/t2=t1;}else{t2=head;while(t2->next!=NULL)t2=t2->next;/*没有成立则指向下个结点*/t2->next=t1;}getchar();printf("是否继续添加(Y/N):\n");scanf("%s",&i);/*输入Y/N*/if(i=='y'||i=='Y'){clrscr();gotoloop;/*清屏在循环*/}else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);if(i=='y'||i=='Y')/*是否要保存*/{baocun();/*调用保存*/clrscr();/*清屏*/stubent187();/*调用屏幕函数*/printf("保存成功");}elseif(i=='n'||i=='N'){clrscr();/*清屏*/stubent187();}/*调用屏幕函数*/}return;}voiddel(){/*删除*/ID*A,*B;/*定义指针*/chart,i;intxuehao;/*定义整型变量与字符型变量*/A=B=NULL;if((zhi=fopen("","a+"))==NULL)printf("没有此信息文件\n");else{loop:printf("请输入要删除的学生学号:");scanf("%d",&xuehao);while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:*/if(A!=NULL&&A->xuehao!=xuehao)A=A->next;elsebreak;}if(A->xuehao==xuehao){head=A->next;free(*A);printf("成功!\n");printf("是否继续删除(Y/N)");scanf("%s",&i);if(i=='y'||i=='Y'){clrscr();gotoloop;}if(i=='n'||i=='N')printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);if(i=='y'||i=='Y')baocun();elseclrscr();stubent187();}elseprintf("无法找到此编号\n");}}voidxiugai(){/*修改*/ID*t1,*t2;/*定义指针*/inti;charxuehao;/*定义整型变量与字符型变量*/t1=head;if((zhi=fopen("","a+"))==NULL)printf("没有此信息文件\n");loop:printf("请输入要修改的学号:");scanf("%s",&xuehao);/*输入编号*/while(!feof(zhi)){fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:*/if(t1!=NULL&&t1->xuehao!=xuehao)t1=t1->next;elsebreak;}if(t1->xuehao==xuehao){fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);printf("输入名字:");scanf("%s",&t1->ming);/*名字*/printf("输入性别:");scanf("%s",&(t1->xing));/*性别*/printf("输入年龄:");scanf("%s",&(t1->nian));/*年龄*/printf("输入学号:");scanf("%s",&t1->xuehao);/*学号*/printf("输入系别:");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:");scanf("%s",&(t1->jia));/*家庭地址*/printf("成功!\n");printf("是否继续修改(Y/N)");scanf("%d",&i);if(i=='y'||i=='Y'){clrscr();gotoloop;}if(i=='n'||i=='N')printf("是否保存此次修改(Y/N)\n");scanf("%c",&i);if(i=='y'||i=='Y')baocun();elseclrscr();/*清屏*/stubent187();/*调用屏幕函数*/}elseprintf("没有此编号\n");return;}baocu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医护理学(第5版)课件 第十章 其他常用中医护理技术
- 三农产品包装与运输管理手册
- 物理力学概念引入与实践活动设计
- 政府部门信息化建设和数据治理方案
- 销售员工心态培训课程
- 可行性研究报告封面格式
- 建筑智能化系统设计技术规范
- 零售业O2O营销模式创新与实施策略
- 绿色建筑材料应用技术规范书
- 机器人技术及其在物流行业的应用手册
- 人才招聘与培养策略优化方案
- 2025年湖南高速铁路职业技术学院单招职业适应性测试题库带答案
- 江西南昌市2025届高三语文一模作文:对“差不多”“尽力了”的思考
- 《桥梁健康监测》课件
- 公司员工手公司员工手册
- 自媒体运营实战教程(抖音版) 课件 第7、8章 短视频运营;直播运营
- 中国对RCEP国家机电产品出口贸易潜力研究
- 2025年陕西西安康本材料有限公司招聘笔试参考题库含答案解析
- 音频内容创新策略-洞察分析
- 2024年陕西财经职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2025年苏教版三年级数学下册阶段测试试卷
评论
0/150
提交评论