课程设计——宿舍管理系统.doc
《课程设计——宿舍管理系统.doc》由会员分享,可在线阅读,更多相关《课程设计——宿舍管理系统.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录1.问题描述32.功能分析33.设计及实现要点33.1.设计33.2.模块结构图33.3.界面设计43.4.数据结构设计43.5.函数设计53.6.程序运行示意图64.源程序75.运行程序及测试程序165.1.运行测试166.不足之处167.参考文献17宿舍管理系统1.问题描述为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求采用交互工作方式,建立数据文件 。数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种);查询菜单: 按姓名查询、按学号查询、按房号查询;打印任一查询结果(可以连续操作)。2.功能分析 创建宿舍信息文件:用户根据提示输入学生信息:姓名、学号
2、、房号、班级。这些信息会存入系统磁盘中保存 访问旧文件:可以根据用户以前输入的文件名来打开以前录入的信息 查询学生信息:提供学号查询、姓名查询、房号查询三种查询方式 增加学生信息:可在原有的学生信息文件的基础上增加新的学生信息记录并继续保存至磁盘,并且将增加后的文件存储状况显示给用户。 删除学生信息:提示用户输入要进行删除操作的学生姓名,如果在文件中有该信息存在,则将该姓名所对应的记录删除。 修改学生信息:提示用户输入要进行修改操作的学生姓名,如果在文件中有该息存在,则将提示用户输入该姓名对应的要修改的选项,结果存储于文件。 输出全部学生信息:将学生的信息按学号的大小次序全部输出 退出系统3.
3、设计及实现要点3.1.设计程序总体结构:输入输出模块:人机交互,包括程序初始时的界面显示,用户的选择输入,及相关输出等。管理模块:从输入输出模块中读取用户命令并进行相关的操作,包括对书籍信息的创建,添加,删除,查询,修改等。文件操作模块:进行储存的信息文件的读写等。3.2.模块结构图输入输出终端 输入输出模块 用户输入 系统输出管理模块文件操作模块储存文件 文件写入 文件读出 图 13.3.界面设计 图 23.4.数据结构设计 typedef struct pnode /结构体定义 用于存放学生信息的节点char name 10; /姓名char xh16; /学号char fh30; /房号
4、char bj20; /班级student;3.5.函数设计函数原型 函数功能函数处理描述void creat() 初始条件,创建新数据文件,用于存放学生信息调用文件操作函数来实现void readfile() 文件读取函数,打开已有的数据文件调用文件操作函数来实现void output()输出函数,用于输出所有的学生信息调用文件操作函数,并将学号作为关键字进行冒泡排序再输出void namesearch()用于以姓名为关键字查询使用指针,将关键字与记录比较,若相同则输出void xhsearch()用于以学号为关键字查询使用指针,将关键字与记录比较,若相同则输出void roomsearch
5、 ()用于以房号为关键字查询使用指针,将关键字与记录比较,若相同则输出void add()添加函数,以姓名为关键字加入新的学生信息使用指针,建立一个新节点,将新信息插入原文件中void modify()用于以修改已存在的学生信息,以姓名为关键字使用指针,将关键字与记录比较,若相同则更改原纪录并保存在原文件中void deleted()用于删除所选的学生信息,以姓名为关键字使用指针,将关键字与记录比较,若相同则删除一切相关记录 表 13.6.程序运行示意图初始化程序结束主菜单 退出系统 增加删除修改查询错误提醒读写文件读文件给出结果 图 34.源程序#include#include#includ
6、e#includetypedef struct pnode /结构体定义 用于存放学生信息的节点char name 10; /姓名char xh16; /学号char fh30; /房号char bj20; /班级student;char filename20; /文件名FILE *fp; /指向文件的指针void creat() /创建新数据文件的函数 创建一个二进制文件 用于存放学生数据student *person; person=(student *)malloc(sizeof(student); /为节点分配内存 printf(n 请您输入文件名:n); scanf(%s,filen
7、ame); if(fp=fopen(filename,w+)=NULL) printf(n 您没有输入文件名 不能找到文件); exit(0); printf(n请输入学生的姓名 学号(长度应该相同) 房号 班级 中间用空格隔开 以#结束n);scanf(%s,person-name);while(strcmp(person-name,#) /该循环用于控制 学生信息的录入 当输入#时 学生信息录入完毕scanf(%s %s %s,person-xh,person-fh,person-bj);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person
8、-xh,person-fh,person-bj); scanf(%s,person-name); fclose(fp);void readfile() /文件读取函数 用于打开已有的数据文件printf(n请输入旧文件的文件名:n); scanf(%s,filename); /此处输入为文件的路径 如c:zhang if(fp=fopen(filename,r+)=NULL)printf(n无法打开该文件:n);exit(0);fclose(fp);void output() /输出函数 用于输出文件的全部信息student *person; long offset1,offset2; cha
9、r name110,name210,name310; char xh116,xh216,xh316; char fh130,fh230,fh330; char bj120,bj220,bj320;person=(student *)malloc(sizeof(student); if(fp=fopen(filename,r)=NULL)printf(n 无法打开该文件); exit(0); while(!feof(fp) /此循环用于对文件数据中关键字学号进行从小到大冒泡排序 int a,b,c,d; /a为循环结束判定变量 b,c,d用于起泡排序时学号交换的替换if(fp=fopen(fil
10、ename,r+)=NULL)printf(n 无法打开该文件);exit(0);/冒泡排序 while(!feof(fp) / 外部循环 while(!feof(fp) /内部循环 offset1=ftell(fp); /获取文件内部当前指针位置 fscanf(fp,%s%s%s%sn,person-name,person-xh,person-fh,person-bj); strcpy(name1,person-name); strcpy (xh1,person-xh); strcpy(fh1,person-fh); strcpy(bj1,person-bj); if(feof(fp) br
11、eak; /文件结束 跳出循环 offset2=ftell(fp); /获取文件内部下一指针位置 fscanf(fp,%s%s%s%sn,person-name,person-xh,person-fh,person-bj); strcpy (name2,person-name); strcpy(xh2,person-xh); strcpy(fh2,person-fh); strcpy(bj2,person-bj); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b=c&d0) /如果 学号1大于等于学号2 则交换全部数据 strcpy(
12、name3,name1); strcpy(name1,name2); strcpy(name2,name3); strcpy(xh3,xh1); strcpy(xh1,xh2); strcpy(xh2,xh3); strcpy(fh3,fh1); strcpy(fh1,fh2); strcpy(fh2,fh3); strcpy(bj3,bj1); strcpy(bj1,bj2); strcpy(bj2,bj3); fseek(fp,offset1,SEEK_SET); /将文件指针移动offset1个字节 strcpy(person-name,name1); strcpy(person-xh,
13、xh1); strcpy(person-fh,fh1); strcpy(person-bj,bj1); fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-xh,person-fh,person-bj);/排序后写入文件 strcpy(person-name,name2); strcpy(person-xh,xh2); strcpy( person-fh,fh2); strcpy(person-bj,bj2); fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-xh,person-fh,p
14、erson-bj);/排序后写入文件 fseek(fp,offset2,SEEK_SET); /将文件位置指针从文件头向前移动offset2个字节 rewind(fp); /指向头文件 while(!feof(fp) /此循环用于判断学号是否有序 offset1=ftell(fp); fscanf(fp,%s%s%s%sn,person-name,person-xh,person-fh,person-bj); strcpy (xh1,person-xh); if(feof(fp) a=1; break; offset2=ftell(fp); fscanf(fp,%s%s%s%sn,person
15、-name,person-xh,person-fh,person-bj); strcpy(xh2,person-xh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b=c&dname,person-xh,person-fh,person-bj);printf(%-20s%-20s%-20s%-20sn,person-name,person-xh,person-fh,person-bj);fclose(fp);printf(*nn);void namesearch() / 按姓名搜索函数int k=0; char namekey10;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 宿舍 管理 系统
限制150内