已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目:学生信息管理系统一、需求分析任务要求:自学c语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下: 建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容; 能够提供添加、删除和修改学生信息等功能; 能将通讯录保存在文件中; 能够按指定方式输出学生信息。系统功能需求分析: 1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点; 2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。这其中要用到对链表的删除、插入等知识。删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。插入时也要先找到相应结点,再添加。3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息。二、概要设计系统总体设计框架: 对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。系统功能模块图: 主菜单学生形象查询学生信息添加学生信息删除学生信息添加是否保存 关闭文件三、详细设计主要功能模块的算法设计思路如下:1、查询通讯录信息(void chakan())(1)为开辟一个新单元(2)输入查询关键字:(3)读取保存的文件数据输入ascll字符:(4)在链表中寻找相应结点;(5)调用输出函数,输出结点信息。2、添加信息函数(void add())(1)定义指向结构体变量的指针;(2)移动指针,找到插入结点;(3)在要插入的结点输入信息;(4)调用保存函数,打开文件,保存输入信息。3、删除信息函数(void del())(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找要删除的结点;(4)修改链表,删除对应结点。4、修改信息函数(void xiugai())(1)定义指向结构体变量的指针;(2)读取保存的文件数据输入ascll字符:(3)用指针检验链表中是否有记录,若没记录,返回主函数;(4)根据要修改的编号查找对应结点;(5)修改信息;(6)打开文件,保存修改记录。 5、保存信息函数(baocun())(1)定义指向结构体变量的指针;(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:(3)用指针检验链表中是否有记录,若没记录,返回主函数:(4)打开文件,保存记录:6、屏幕操作函数(void stubent187())(1)以一定格式输出所想要的图形:四、主要源程序代码定义变量:(对整个程序定义全局变量)#include stdio.h#include conio.h #define student id /*所有student都用id来代替*/ typedef struct node /*定义结构体*/ char ming50; /*名字*/ char xing50; /*性别*/ char nian50; /*年龄*/ int xuehao; /*学号*/ char xibie50; /*专业*/ char sushe50; /*宿舍号*/ char jia50; /*家庭地址*/ struct node *next; id; /*学生信息(变量名)*/ id *head=null; /*定义一个头指针*/file *zhi; /*定义一个文件指针*/主菜单界面:(进入屏幕界面的形式)void stubent187() /*屏幕格式函数*/ printf(*n); printf(* 学生信息管理系统 *n); printf(* *n); printf(* 请选择:1:查看; 2:添加; 3:删除; *n); printf(* 4:修改; 0:退出系统 *n); printf(* *n); printf(*n); printf(输入 04 数字ming,&t-xing,&t-nian,&t-xuehao,&t-xibie,&t-sushe,&t-jia); /*读取保存的文件数据输入ascll字符:*/ printf(%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以这形式输出各个学生信息*/ t-next=(id *)malloc(sizeof(id);t=t-next; ; 添加学生信息记录:()void add() char i; /*添加*/ 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(); goto loop; /* 清屏 在 循环*/ else printf(是否保存此次添加(y/n)n);scanf(%s,&i); if(i=y|i=y) /*是否要保存*/ baocun(); /*调用保存*/ clrscr(); /*清屏*/ stubent187();/*调用屏幕函数*/ printf(保存成功); else if(i=n|i=n) clrscr(); /*清屏*/ stubent187(); /*调用屏幕函数*/ return ;删除学生信息操作:(对以存的学生信息进行删除)void del() /*删除*/ id *a,*b; /*定义指针*/ char t,i;int xuehao; /*定义整型变量与字符型变量*/ a=b=null; if(zhi=fopen(yihu1.txt,a+)=null) printf(没有此信息文件n); else loop: printf(请输入要删除的学生学号:);scanf(%d,&xuehao); while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&a-ming,&a-xing,&a-nian,&a-xuehao,&a-xibie,&a-sushe,&a-jia); /*读取保存的文件数据输入ascll字符:*/ if(a!=null & a-xuehao!=xuehao) a=a-next; else break; if (a-xuehao=xuehao) head=a-next; free(*a); printf(成功!n); printf(是否继续删除(y/n);scanf(%s,&i); if(i=y|i=y) clrscr(); goto loop; if(i=n|i=n) printf(是否保存此次删除(y/n)n);scanf(%s,&i); if(i=y|i=y) baocun(); else clrscr(); stubent187(); else printf(无法找到此编号n); 修改学生信息操作:(对保存的学生信息进行修改) void xiugai() /*修改*/ id *t1,*t2; /*定义指针*/ int i;char xuehao; /*定义整型变量与字符型变量*/ t1=head; if(zhi=fopen(yihu1.txt,a+)=null) printf(没有此信息文件n);loop: printf(请输入要修改的学号:);scanf(%s,&xuehao); /* 输入编号*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t1-ming,&t1-xing,&t1-nian,&t1-xuehao,&t1-xibie,&t1-sushe,&t1-jia); *读取保存的文件数据输入ascll字符:*/ if(t1!=null & t1-xuehao!=xuehao) t1=t1-next; else break; if (t1-xuehao=xuehao) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,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(); goto loop; if(i=n|i=n) printf(是否保存此次修改(y/n)n);scanf(%c,&i); if(i=y|i=y) baocun(); else clrscr(); /*清屏*/ stubent187(); /*调用屏幕函数*/ else printf(没有此编号n); return; 保存添加,删除,修改学生的信息:(操作过后是否保存)baocun() /*保存*/ id *t=head; /*定义指针*/ zhi=fopen(yihu1.txt,a+); /*(读写 yihu.txt文本) */ while (t!=null) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以zhi为文件指针保存*/ t=t-next; fclose(zhi); /*关闭此文件*/ printf(成功!n); return ; 主菜单操作:(选择所需要的操作)main() /*主函数*/ int i; /*定义整形变量i*/ stubent187(); /*调用屏幕函数*/ while(1) scanf(%d,&i); /*输入要执行的操作*/ switch(i) case 1:chakan();break; /*调用查看函数*/ case 2:add();break; /*调用添加函数*/ case 3:del();break; /*调用删除函数*/ case 4:xiugai();break; /*调用修改函数*/ case 0:exit(0); /*结束*/ default:printf(输入错误,请在此输入n);continue; /*输入不是04的,则返回*/ 源函数代码:void chakan() /* 查看*/ id *t; t=head; t=(id *)malloc(sizeof(id); /*为t开辟一个新单元*/ if(zhi=fopen(yihu1.txt,rb)=null) printf(没有此文件n); else printf(%10s%10s%10s%10s%10s%10s%10sn,ming,xing,nian,xuehao,eng,sushe,jia); /*输出一个屏幕格式*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t-ming,&t-xing,&t-nian,&t-xuehao,&t-xibie,&t-sushe,&t-jia); /*读取保存的文件数据输入ascll字符:*/ printf(%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以这形式输出各个学生信息*/ t-next=(id *)malloc(sizeof(id);t=t-next; ; void add() char i; /*添加*/ 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(); goto loop; /* 清屏 在 循环*/ else printf(是否保存此次添加(y/n)n);scanf(%s,&i); if(i=y|i=y) /*是否要保存*/ baocun(); /*调用保存*/ clrscr(); /*清屏*/ stubent187();/*调用屏幕函数*/ printf(保存成功); else if(i=n|i=n) clrscr(); /*清屏*/ stubent187(); /*调用屏幕函数*/ return ;void del() /*删除*/ id *a,*b; /*定义指针*/ char t,i;int xuehao; /*定义整型变量与字符型变量*/ a=b=null; if(zhi=fopen(yihu1.txt,a+)=null) printf(没有此信息文件n); else loop: printf(请输入要删除的学生学号:);scanf(%d,&xuehao); while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&a-ming,&a-xing,&a-nian,&a-xuehao,&a-xibie,&a-sushe,&a-jia); /*读取保存的文件数据输入ascll字符:*/ if(a!=null & a-xuehao!=xuehao) a=a-next; else break; if (a-xuehao=xuehao) head=a-next; free(*a); printf(成功!n); printf(是否继续删除(y/n);scanf(%s,&i); if(i=y|i=y) clrscr(); goto loop; if(i=n|i=n) printf(是否保存此次删除(y/n)n);scanf(%s,&i); if(i=y|i=y) baocun(); else clrscr(); stubent187(); else printf(无法找到此编号n); void xiugai() /*修改*/ id *t1,*t2; /*定义指针*/ int i;char xuehao; /*定义整型变量与字符型变量*/ t1=head; if(zhi=fopen(yihu1.txt,a+)=null) printf(没有此信息文件n);loop: printf(请输入要修改的学号:);scanf(%s,&xuehao); /* 输入编号*/ while (!feof(zhi) fscanf(zhi,%10s%10s%10s%10d%10s%10s%10sn,&t1-ming,&t1-xing,&t1-nian,&t1-xuehao,&t1-xibie,&t1-sushe,&t1-jia); *读取保存的文件数据输入ascll字符:*/ if(t1!=null & t1-xuehao!=xuehao) t1=t1-next; else break; if (t1-xuehao=xuehao) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,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(); goto loop; if(i=n|i=n) printf(是否保存此次修改(y/n)n);scanf(%c,&i); if(i=y|i=y) baocun(); else clrscr(); /*清屏*/ stubent187(); /*调用屏幕函数*/ else printf(没有此编号n); return; baocun() /*保存*/ id *t=head; /*定义指针*/ zhi=fopen(yihu1.txt,a+); /*(读写 yihu.txt文本) */ while (t!=null) fprintf(zhi,%10s%10s%10s%10d%10s%10s%10sn,t-ming,t-xing,t-nian,t-xuehao,t-xibie,t-sushe,t-jia); /*以zhi为文件指针
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京热力热源分公司招聘10人笔试考试参考题库及答案解析
- cdfi考试试题及答案
- 2026云南玉溪市江川区林业和草原局招聘森林草原火灾预防专业队队员35人笔试考试参考试题及答案解析
- 2025南平武夷山公务用车驾驶员招聘1人考试笔试参考题库及答案解析
- 2025年北京中医药大学东直门医院洛阳医院(洛阳市中医院)招聘编制外人员65人考试笔试备考题库及答案解析
- 城市综合体外立面改造方案
- 2026中国储备粮管理集团有限公司新疆分公司招聘31人笔试考试备考试题及答案解析
- 婚纱摄影工作室运营与管理
- 危机管理专业面试指南应急任务题型解读与技巧训练
- 教育培训师职业发展总结
- 携手并进+圆梦高考-2025-2026学年高三上学期家长会
- 西游记第86回课件
- 公司治理期末考试及答案
- 奇妙的通信之旅-儿童通信知识科普
- 6.3 两、三位数除以一位数(练习八) 课件 2025-2026学年三年级上册数学苏教版
- 玄武门之变教学课件
- 普通高中英语课程标准(2020版vs2025日常修订版)核心变化对照表
- 2025年11月福建厦门市住房和建设局及所属部分事业单位招聘非在编辅助岗位人员10人考试笔试模拟试题及答案解析
- 公安保密培训课件
- 智能电网技术论文
- 手足口病防治课件
评论
0/150
提交评论