数据结构宿舍管理系统实验报告.docx

上传人:b****6 文档编号:6970100 上传时间:2023-01-13 格式:DOCX 页数:16 大小:57.97KB
下载 相关 举报
数据结构宿舍管理系统实验报告.docx_第1页
第1页 / 共16页
数据结构宿舍管理系统实验报告.docx_第2页
第2页 / 共16页
数据结构宿舍管理系统实验报告.docx_第3页
第3页 / 共16页
数据结构宿舍管理系统实验报告.docx_第4页
第4页 / 共16页
数据结构宿舍管理系统实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构宿舍管理系统实验报告.docx

《数据结构宿舍管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构宿舍管理系统实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构宿舍管理系统实验报告.docx

数据结构宿舍管理系统实验报告

数据结构课程设计报告

设计题目宿舍管理系统

专业信息技术学院

班级计算机科学与技术

姓名顾文婷

学号5

完成日期2014年6月10日

1.问题描述………………………………………………3

2.系统设计………………………………………………3.4

3.数据结构与算法描述…………………………………4-7

4.测试结果与分析………………………………………8-13

5.总结………………………………………………13-14

6.参考文献………………………………………………14

附录程序源代码…………………………………15-35

宿舍管理系统

1.问题描述

建立宿舍管理系统,统计信息包括学生姓名,年龄,出生年月日,性别,学号,班级,系别,床号。

2.系统设计

2.1设计目标

宿舍一般由若干学生入驻,每个宿舍都有独立唯一的编号,入住学生也有唯一的学号,另外添加学生的姓名和班级,使用这些关键字就可以方便的查询和管理宿舍入住情况。

程序设计应采用交互工作方式,并建立数据文件。

程序应通过建立子函数实现创建、保存与载入数据文件,查找、添加、删除、更改、显示等功能,可以自动保存修改。

应具有友好的界面和较强的容错能力。

能够迅速准确地完成各种学生信息的统计和查询,以方便管理员对学生信息的统一管理。

2.2设计思想

为方便管理员对系统进行操作,程序应具有以下功能:

(1)创建宿舍数据文件,并提示管理员输入学生姓名、学号、宿舍号、班级等信息,并在本地保存数据文件

(2)打开宿舍数据文件:

输入文件名打开保存过的数据文件

(3)查询住宿信息:

提供学号、姓名、宿舍号三种查询方式

(4)添加住宿信息:

在数据文件中添加新的住宿信息

(5)删除住宿信息:

提示管理员输入要删除的学生姓名,验证后删除

(6)修改住宿信息:

提示管理员输入要修改的学生姓名,验证后修改

(7)输出数据文件:

将住宿信息按学号的大小排序全部输出

(8)退出系统

2.3系统模块划分(要给出流程图)

3.数据结构与算法描述

函数原型

函数功能

函数处理描述

voidcreat()

初始条件,创建新数据文件,用于存放学生信息

调用文件操作函数来实现

voidreadfile()

文件读取函数,打开已有的数据文件

调用文件操作函数来实现

voidoutput()

输出函数,用于输出所有的学生信息

调用文件操作函数,并将学号作为关键字进行冒泡排序再输出

void namesearch()

查找函数,用于以姓名为关键字查询

使用指针,将关键字与记录比较,若相同则输出

voidnumsearch()

查找函数,用于以学号为关键字查询

使用指针,将关键字与记录比较,若相同则输出

Voiddorsearch()

查找函数,用于以房号为关键字查询

使用指针,将关键字与记录比较,若相同则输出

voidadd()

添加函数,以姓名为关键字加入新的学生信息

使用指针,建立一个新节点,将新信息插入原文件中

voidmodify()

修改函数,用于以修改已存在的学生信息,以姓名为关键字

使用指针,将关键字与记录比较,若相同则更改原纪录并保存在原文件中

voiddeleted()

删除函数,用于删除所选的学生信息,以姓名为关键字

使用指针,将关键字与记录比较,若相同则删除一切相关记录

voidmain()

主函数,用于调用子函数

按照输入的命令调用已定义的子函数

3.1创建功能(voidcreat())

使用函数新建链表,再使用while循环完成对宿舍数据的录入,包括姓名、学号、班级、宿舍号等信息。

最终将录入数据保存在数组里。

完成输入后,输入#结束循环。

3.2读取功能(voidreadfile())

使用函数读取数据文件,根据输入的文件名加载保存在本地的数据文件,若找不到相同名称文件,则输出错误提示。

3.3查找功能(voidnamesearch(),voidnumsearch(),voidgroupsearch())

通过输入选择相关的查询函数来完成查找功能,使用指针将关键字与记录比较,若相同则输出,若无相同则输出错误提示。

3.4修改功能(voidModify())

使用函数定义指向结构体变量的指针,检验链表中是否有记录,若有记录,根据要修改的编号查找对应结点修改信息并保存,若没记录,输出错误提示。

3.5删除功能(voiddeleted())

使用函数定义指向结构体变量的指针,用指针检验链表中是否有记录,若有记录根据要修改的编号查找要删除的结点并删除记录,若没记录,输出错误提示。

3.7输出功能(voidoutput())

使用循环语句对已有的宿舍记录进行逐个读取,按学号为关键字进行冒泡排序,经过n-1趟子排序完成,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数,排序完后按顺序输出所有记录。

4.测试结果与分析

5.总结

通过这次课程设计,我对数据结构在程序中的应用有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。

在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序。

在调试过程中,我认识到了语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。

当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。

这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会会完善的。

学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。

在这次课程设计的过程中,我体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。

只有思想上清晰了,编程才有意义,否则就是白费力气。

同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。

这次课程设计培养了我的细心和耐性,更树立了一种科学的态度。

6.参考文献

《数据结构》严蔚敏

《c++》

附录程序源代码

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include"conio.h"/*头文件*/

#defineMAX100

typedefstruct{

intyear;

intmonth;

intday;}DATE;

typedefstruct{

intnum;/*学号*/

charname[20];/*姓名*//*定义结构体*/

charsex[6];/*性别*/

intage;/*年龄*/

DATEbirthday;/*出生年月*/

charsushe[30];/*宿舍号*/

charclasses[10];/*班级*/

charzhuanye[50];/*专业*/

charchuanghao[50];/*床号*/

}STUDENTS;/*读取信息*/

intread_file(STUDENTSstudents[]){

FILE*fp;

inti=0;

if((fp=fopen("stu.txt","rt"))==NULL){

printf("\n\n*****库存文件不存在!

请创建");/*创建文件*/

return0;

}

while((fread(&students[i],sizeof(STUDENTS),1,fp))==1)/*成功创建*/

{

i++;}

fclose(fp);

returni;

}/*保存信息*/

voidsave_file(STUDENTSstudents[],intsum){

FILE*fp;

inti;

if((fp=fopen("stu.txt","wb"))==NULL){

printf("读文件错误!

\n");

return;}

for(i=0;i

if(fwrite(&students[i],sizeof(STUDENTS),1,fp)!

=1)

printf("写文件错误!

\n");/*学生信息保存到文件中*/

fclose(fp);}/*输入模块*/

intinput(STUDENTSstudents[]){

inti=0,t;

/*定义要输入学生的个数*/

system("cls");

printf("\n\n录入学生个数(最多%d个)",MAX);

scanf("%d",&t);

printf("------------------------\n");

do{//printf("\n第%d个学生信息",i+1);/*输入学生的基本信息*/

printf("\n第%d个学生的学号",i+1);scanf("%d",&students[i].num);

if(students[i].num==0)

break;

printf("\n学生姓名:

");

scanf("%s",students[i].name);

printf("\n学生性别:

");

scanf("%s",students[i].sex);

printf("\n学生年龄:

");

scanf("%d",&students[i].age);

printf("\n学生出生年月日:

");

scanf("%d%d%d",&students[i].birthday.year,&students[i].birthday.month,&students[i].birthday.day);

printf("\n学生宿舍:

");

scanf("%s",students[i].sushe);

printf("\n学生班级:

");

scanf("%s",students[i].classes);

printf("\n学生专业:

");

scanf("%s",students[i].zhuanye);

printf("\n学生床号:

");

scanf("%s",students[i].chuanghao);

i++;}while(i

save_file(students,t);/*保存输入的学生信息*/

printf("\n%d个学生信息输入完毕!

\n",t);

getch();

returnt;/*返回输入学生的个数值*/

}/*输出模块*/

voidoutput(STUDENTSstudents[],intsum){

inti;

system("cls");

printf("numnamesexageyear-month-daysusheclasseszhuanyechuanghao\n");

printf("\n");

for(i=0;i

{

printf("%5d%5s%5s%5d%5d%5d%5d%5s%5s%5s%5s\n",

students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,

students[i].birthday.month,students[i].birthday.day,students[i].sushe,

students[i].classes,students[i].zhuanye,students[i].chuanghao);

printf("\n");

}

getch();

save_file(students,sum);}/*添加信息模块*/

intappend(STUDENTSstudents[],intsum){

inti=sum,flag=0;/*从已经输入的学生尾部添加*/

charchoice;

sum=read_file(students);

system("cls");printf("\n\n添加学生信息\n");

do{if(i

{

printf("\n新学生学号:

");

scanf("%d",&students[i].num);

printf("\n学生姓名:

");

scanf("%s",students[i].name);

printf("\n学生性别:

");/*输入添加学生的基本信息*/

scanf("%s",students[i].sex);

printf("\n学生年龄:

");

scanf("%d",&students[i].age);

printf("\n学生出生年月日:

");

scanf("%d%d%d",&students[i].birthday.year,&students[i].birthday.month,&students[i].birthday.day);

printf("\n学生宿舍号:

");

scanf("%s",students[i].sushe);

printf("\n学生班级:

");

scanf("%s",students[i].classes);

printf("\n学生专业:

");

scanf("%s",students[i].zhuanye);

printf("\n床号:

");

scanf("%s",students[i].chuanghao);

i++;}

printf("\n继续添加吗?

(Y/N)");

choice=getch();

if(choice=='Y'||choice=='y'){

flag=1;

printf("\n继续!

\n");/*是否要继续添加*/

}

elseflag=0;}

while(flag==1);

printf("\n按任意键返回主菜单!

");

getch();

save_file(students,i);/*保存添加的学生信息到原文件*/

returni;/*返回文件中学生个数值*/

}/*修改信息模块*/

voidmodify(STUDENTSstudents[],intsum){//

FILE*fp;

inti,choice,flag,modify_num;

sum=read_file(students);/*读文件*/

do{

system("cls");

printf("\n输入要修改的学生学号:

");

scanf("%d",&modify_num);/*输入要修改的学生学号*/

for(i=0;i

if(students[i].num==modify_num){

printf("\n学生信息\n");

printf("numnamesexageyear-month-dayaddresssushezhuanyechuanghao\n");

printf("\n");

printf("%5d%5s%5s%5d%5d%5d%5d%5s%5s%5s%5s\n",

students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,students[i].birthday.month,

students[i].birthday.day,students[i].sushe,students[i].classes,students[i].zhuanye,students[i].chuanghao);

printf("\n要修改哪一项?

\n");

printf("\n1.学生学号\n");

printf("\n2.学生姓名\n");

printf("\n3.学生性别\n");

printf("\n4.学生年龄\n");

printf("\n5.学生出生年月日\n");

printf("\n6.学生宿舍号\n");

printf("\n7.学生班级\n");

printf("\n8.学生专业\n");

printf("\n9.学生床号\n");

printf("\n请选择(1-9):

");

scanf("%d",&choice);

switch(choice){

case1:

printf("\n输入修改后的学号:

");

scanf("%d",&students[i].num);break;

case2:

printf("\n输入修改后的姓名:

");

scanf("%s",students[i].name);break;

case3:

printf("\n输入修改后的性别:

");

scanf("%s",students[i].sex);break;/*选择要修改学生的项目*/

case4:

printf("\n输入修改后的年龄:

");

scanf("%d",&students[i].age);break;

case5:

printf("\n输入修改后的出生年月:

");

scanf("%d%d%d",&students[i].birthday.year,&students[i].birthday.month,&students[i].birthday.day);

break;

case6:

printf("\n输入修改后的宿舍号:

");

scanf("%s",students[i].sushe);break;

case7:

printf("\n输入修改后的班级:

");

scanf("%s",students[i].classes);break;

case8:

printf("\n输入修改后的专业:

");

scanf("%s",students[i].zhuanye);break;

case9:

printf("\n输入修改后的床号:

");

scanf("%s",students[i].chuanghao);break;}

printf("\n学生信息表\n");

printf("numnamesexageyear-month-daysusheclasseszhuanyechuanghao\n");

printf("\n");

printf("%5d%5s%5s%5d%5d%5d%5d%5s%5s%5s%5s\n",

students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,

students[i].birthday.month,students[i].birthday.day,students[i].sushe,

students[i].classes,students[i].zhuanye,students[i].chuanghao);

break;/*输出修改后的学生信息*/

}

if(i==sum){

printf("\n该学生不存在!

");

getch();}

printf("\n\n继续修改吗?

(Y/N)");

choice=getch();

if(choice=='Y'||choice=='y'){

flag=1;

printf("\n继续!

\n");}/*是否要继续修改*/

elseflag=0;}while(flag==1);

printf("\n按任意键返回主菜单!

");

getch();

save_file(students,sum);/*保存修改后的信息*/

}/*删除信息模块*/

intdel(STUDENTSstudents[],intsum){

inti,del_num;

printf("请输入要删除的学生学号");

scanf("%d",&del_num);/*输入要删除的学生学号*/

for(i=0;i

if(del_num==students[i].num){

for(;i

students[i].num=students[i+1].num;

printf("删除成功");}

}

getch();

save_file(students,sum-1);/*保存删除后的学生信息到原文件*/

return(sum-1);}

/*查询信息模块*/

voidinquire(STUDENTSstudents[],intsum){

FILE*fp;

inti,choice,flag,inquire_num;

sum=read_file(students);/*读文件*/

printf("%d\n",sum);

do{system("cls");

printf("\n输入要查询的学生学号:

");

scanf("%d",&inquire_num);/*输入要查询的学生学号*/

for(i=0;i

if(students[i].num==inquire_num){

printf("\n此学生信息为:

\n");

printf("numnamesexageyear-month-daysusheclasseszhuanyechuanghao\n");

printf("\n");

printf("%5d%5s%5s%5d%d%d%d%5s%5s%5s%5s\n",

students[i].num,students[i].name,students[i].sex,students[i].age,students[i].b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1