数据结构课程设计报告宿舍管理系统.docx

上传人:b****6 文档编号:12518550 上传时间:2023-06-06 格式:DOCX 页数:20 大小:72.88KB
下载 相关 举报
数据结构课程设计报告宿舍管理系统.docx_第1页
第1页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第2页
第2页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第3页
第3页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第4页
第4页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第5页
第5页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第6页
第6页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第7页
第7页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第8页
第8页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第9页
第9页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第10页
第10页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第11页
第11页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第12页
第12页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第13页
第13页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第14页
第14页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第15页
第15页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第16页
第16页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第17页
第17页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第18页
第18页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第19页
第19页 / 共20页
数据结构课程设计报告宿舍管理系统.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告宿舍管理系统.docx

《数据结构课程设计报告宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告宿舍管理系统.docx(20页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告宿舍管理系统.docx

数据结构课程设计报告宿舍管理系统

CKBOODwasrevisedintheearlymorningofDecember17,2020.

 

数据结构课程设计报告宿舍管理系统

数据结构课程设计报告

设计题目:

学生宿舍管理系统

学院:

年级专业:

姓名:

学号:

指导老师:

1.设计目的

宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表及外部文件的内容,为后勤管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求。

通过实际课题设计,可以对我们加深书本知识理解,了解并掌握数据结构与算法的设计方法,培养独立分析和设计能力,掌握软件开发过程的基本方法和技能,对我们的个人素质提高大有脾益。

2.需求分析

性能分析

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

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

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

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

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

功能分析

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

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

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

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

(3)查询住宿信息:

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

(4)添加住宿信息:

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

(5)删除住宿信息:

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

(6)修改住宿信息:

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

(7)输出数据文件:

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

(8)退出系统

3.程序结构及流程设计

系统流程图

 

函数设计

函数原型

函数功能

函数处理描述

voidcreat()

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

调用文件操作函数来实现

voidreadfile()

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

调用文件操作函数来实现

voidoutput()

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

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

voidnamesearch()

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

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

voidnumsearch()

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

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

Voiddorsearch()

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

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

voidadd()

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

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

voidmodify()

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

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

voiddeleted()

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

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

voidmain()

主函数,用于调用子函数

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

4.系统详细设计

数据结构设计

typedefstructpnode统调试

主界面

创建界面

加载界面

按姓名查询

按学号查询

按宿舍号查询

修改界面

删除界面

添加界面

输出界面

本地数据文件

系统分析

经过测试,该宿舍管理系统结构清晰,运行时测试也相对简单。

设计的功能可以完全实现,输入的信息也可以正确显示,可以成功地退出程序。

程序运行开始,根据界面提示选择输入,测试对学生信息的增加,删除,查询,修改等功能是否实现及输出相应的信息。

当选择退出程序时,系统有没有正常结束退出程序。

本程序的不足之处在于没有登录程序,这样就没有办法设置用户管理及权限设置。

程序在运行时没有设置清屏程序,以至于屏幕不够简洁。

函数实现的功能也不够全面,在删除,更改等操作中仅以姓名为关键字,有一定的局限性。

6.心得体会

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

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

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

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

这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。

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

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

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

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

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

7.参考资料

[1]田鲁怀.数据结构.北京:

电子工业出版社,2010

[2]谭浩强.C语言程序设计(第三版).北京:

清华大学出版社,2005

[3]刘振安,孙忱,刘燕君.C程序设计课程设计.北京:

机械工业出版社,2007

8.附录

源程序

#include<>

#include<>

#include<>

#include<>

typedefstructpnode//结构体定义用于存放学生信息的节点

{

charname[10];//姓名

charnum[16];//学号

chardor[30];//房号

chargroup[20];//班级

}student;

charfilename[20];//文件名

FILE*fp;//指向文件的指针

voidcreat()//创建一个二进制文件用于存放学生数据

{student*person;

person=(student*)malloc(sizeof(student));//为节点分配内存

printf("\n请您输入文件名:

\n");

scanf("%s",filename);

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->num,person->dor,person->group);

fprintf(fp,"%-10s%-10s%-10s%-10s\n",person->name,person->num,person->dor,person->group);scanf("%s",person->name);

}

fclose(fp);

}

voidreadfile()//文件读取函数

{printf("\n请输入文件名:

\n");

scanf("%s",filename);//此处输入为文件的路径

if((fp=fopen(filename,"r+"))==NULL)

{printf("\n无法打开该文件:

\n");exit(0);}

fclose(fp);

}

voidoutput()//输出函数用于输出文件的全部信息

{student*person;

longoffset1,offset2;

charname1[10],name2[10],name3[10];

charnum1[16],num2[16],num3[16];

chardor1[30],dor2[30],dor3[30];

chargroup1[20],group2[20],group3[20];

person=(student*)malloc(sizeof(student));

if((fp=fopen(filename,"r"))==NULL)

{printf("\n无法打开该文件");exit(0);}

while(!

feof(fp))//此循环用于对文件数据中关键字学号进行从小到大冒泡排序

{inta,b,c,d;//a为循环结束判定变量b,c,d用于起泡排序学号交换的替换

if((fp=fopen(filename,"r+"))==NULL)//冒泡排序

{printf("\n无法打开该文件");exit(0);}

while(!

feof(fp))//外部循环

{

while(!

feof(fp))//内部循环

{

offset1=ftell(fp);//获取文件内部当前指针位置fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

strcpy(name1,person->name);

strcpy(num1,person->num);

strcpy(dor1,person->dor);

strcpy(group1,person->group);

if(feof(fp))

break;//文件结束跳出循环

offset2=ftell(fp);//获取文件内部下一指针位置fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

strcpy(name2,person->name);

strcpy(num2,person->num);

strcpy(dor2,person->dor);

strcpy(group2,person->group);

b=strlen(num1);

c=strlen(num2);

d=strcmp(num1,num2);

if(b==c&&d>0)//如果学号1大于等于学号2则交换全部数据

{strcpy(name3,name1);

strcpy(name1,name2);

strcpy(name2,name3);

strcpy(num3,num1);

strcpy(num1,num2);

strcpy(num2,num3);

strcpy(dor3,dor1);

strcpy(dor1,dor2);

strcpy(dor2,dor3);

strcpy(group3,group1);

strcpy(group1,group2);

strcpy(group2,group3);

fseek(fp,offset1,SEEK_SET);//将指针移动offset1个字节

strcpy(person->name,name1);

strcpy(person->num,num1);

strcpy(person->dor,dor1);

strcpy(person->group,group1);

fprintf(fp,"%-10s%-10s%-10s%-10s\n",

person->name,person->num,person->dor,person->group);//排序后写入文件

strcpy(person->name,name2);

strcpy(person->num,num2);

strcpy(person->dor,dor2);

strcpy(person->group,group2);

fprintf(fp,"%-10s%-10s%-10s%-10s\n",person->name,person->num,person->dor,person->group);//排序后写入文件

}

fseek(fp,offset2,SEEK_SET);

//将文件位置指针从文件头向前移动offset2个字节

}

rewind(fp);//指向头文件

while(!

feof(fp))//此循环用于判断学号是否有序

{offset1=ftell(fp);

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

strcpy(num1,person->num);

if(feof(fp))

{a=1;break;}

offset2=ftell(fp);

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

strcpy(num2,person->num);

b=strlen(num1);

c=strlen(num2);

d=strcmp(num1,num2);

if(b==c&&d<=0)

a=1;//若a为1则有序

else

{a=0;//a为0则无序

break;}

fseek(fp,offset2,SEEK_SET);

}

if(a==1)

break;//a为1说明学号已经有序跳出循环

rewind(fp);

}

if(a)break;//若a为1,则学号已有序排列,跳出总循环,输出文件

}

rewind(fp);

printf("\n****************************************************************\n");

printf("%40s\n","输出的记录如下(已按学号排序)\n");

printf("%-20s%-20s%-20s%-20s\n","姓名","学号","房号","班级");

while(!

feof(fp))//次循环用于输出文件

{

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

printf("%-20s%-20s%-20s%-20s\n",

person->name,person->num,person->dor,person->group);

}

fclose(fp);

printf("************************************************************\n\n");

}

voidnamesearch()//按姓名搜索函数

{intk=0;

charnamekey[10];

student*person;

person=(student*)malloc(sizeof(student));

printf("\n请输入您要查找的姓名:

");

scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)

{printf("\n无法打开文件");exit(0);}

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

if(!

strcmp(namekey,person->name))

{printf("\n\n已经为您找到以下是记录:

\n\n");

printf("%-20s%-20s%-20s%-20s\n","姓名","学号","房号","班级");

printf("%-20s%-20s%-20s%-20s\n",person->name,person->num,person->dor,person->group);

k=1;

}

}

if(!

k)

printf("\n\n没有关于此姓名的任何信息!

\n");

fclose(fp);

}

voidnumsearch()//按学号搜索函数

{intk=0;

charxhkey[16];

student*person;

person=(student*)malloc(sizeof(student));

printf("\n请您输入需要查找的学号:

");

scanf("%s",xhkey);

if((fp=fopen(filename,"rb"))==NULL)

{

printf("\n无法打开文件");

exit(0);

}

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

if(!

strcmp(xhkey,person->num))

{printf("\n\n已经为您找到以下是记录:

\n\n");

printf("%-20s%-20s%-20s%-20s\n","姓名","学号","房号","班级");

printf("%-20s%-20s%-20s%-20s\n",person->name,person->num,person->dor,person->group);

k=1;

}

}

if(!

k)

printf("\n\n没有关于该学号的任何信息\n");

fclose(fp);

}

voiddorsearch()//按房号搜索函数

{intk=0;

charfhkey[30];

student*person;

person=(student*)malloc(sizeof(student));

printf("\n请您输入想要查找的房号");

scanf("%s",fhkey);

if((fp=fopen(filename,"rb"))==NULL)

{printf("\n无法打开文件");

exit(0);

}

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

if(!

strcmp(fhkey,person->dor))

{printf("\n\n已经为您找到以下是记录:

\n\n");

printf("%-20s%-20s%-20s%-20s\n","姓名","学号","房号","班级");

printf("%-20s%-20s%-20s%-20s\n",person->name,person->num,person->dor,person->group);

k=1;

}

}

if(!

k)

printf("\n\n没有关于此房号的任何信息\n");

fclose(fp);

}

voidadd()//插入函数用于像已有文件插入一条新的学生信息记录

{student*person;

person=(student*)malloc(sizeof(student));

if((fp=fopen(filename,"a"))==NULL)

{printf("\n无法打开文件");exit(0);}

printf("\n请您输入学生姓名学号房号班级\n");

scanf("%s%s%s%s",person->name,person->num,person->dor,person->group);

fprintf(fp,"%-10s%-10s%-10s%-10s\n",person->name,person->num,person->dor,person->group);

fclose(fp);

}

voidmodify()//更新函数用于修改指定学生姓名的记录

{intk=0;

longoffset;

charnamekey[10];

student*person;

person=(student*)malloc(sizeof(student));

printf("\n请您输入想要更改的学生的姓名:

");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{printf("\n无法打开文件");exit(0);}

while(!

feof(fp))

{offset=ftell(fp);

fscanf(fp,"%s%s%s%s\n",person->name,person->num,person->dor,person->group);

if(!

strcmp(namekey,person->name))//比较是否相同如

{k=1;break;}

}

if(k)//相同输出记录并进行修改

{printf("\n记录输出如下:

\n\n");

printf("%-20s%-20s%-20s%-20s\n","姓名","学号","房号","班级");

printf("%-20s%-20s%-20s%-20s\n",person->name,person->num,person->dor,person->group);

printf("\n请您输入新的学生姓名学号房号班级:

\n");

scanf("%s%s%s%s",person->name,person->num,person->dor,person->group);

fseek(fp,offset,SEEK_SET);

fprintf(fp,"%-10s%-10s%-10s%-10s\n",person->name,person->num,person->d

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2