数据结构课程设计报告宿舍管理系统Word文档格式.docx

上传人:b****5 文档编号:20459658 上传时间:2023-01-23 格式:DOCX 页数:20 大小:104.11KB
下载 相关 举报
数据结构课程设计报告宿舍管理系统Word文档格式.docx_第1页
第1页 / 共20页
数据结构课程设计报告宿舍管理系统Word文档格式.docx_第2页
第2页 / 共20页
数据结构课程设计报告宿舍管理系统Word文档格式.docx_第3页
第3页 / 共20页
数据结构课程设计报告宿舍管理系统Word文档格式.docx_第4页
第4页 / 共20页
数据结构课程设计报告宿舍管理系统Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告宿舍管理系统Word文档格式.docx

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

数据结构课程设计报告宿舍管理系统Word文档格式.docx

3.程序结构及流程设计

3.1系统流程图

 

3.2函数设计

函数原型

函数功能

函数处理描述

voidcreat()

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

调用文件操作函数来实现

voidreadfile()

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

voidoutput()

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

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

voidnamesearch()

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

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

voidnumsearch()

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

Voiddorsearch()

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

voidadd()

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

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

voidmodify()

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

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

voiddeleted()

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

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

voidmain()

主函数,用于调用子函数

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

4.系统详细设计

4.1数据结构设计

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

{charname[10];

//姓名

charnum[16];

//学号

charroom[30];

//宿舍号

chargroup[20];

//班级

}student;

charfilename[20];

//文件名

FILE*fp;

//指向文件的指针

4.2创建功能(voidcreat())

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

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

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

4.3读取功能(voidreadfile())

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

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

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

4.5修改功能(voidModify())

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

调用Modify()函数

4.6删除功能(voiddeleted())

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

调用deleted()函数

4.7添加功能(voidAdd())

使用函数定义指向结构体变量的指针,找到插入结点,在要插入的结点输入信息并保存。

调用add()函数

4.8输出功能(voidoutput())

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

5.系统调试

5.1主界面

5.2创建界面

5.3加载界面

5.4按姓名查询

5.5按学号查询

5.6按宿舍号查询

5.7修改界面

5.8删除界面

5.9添加界面

5.10输出界面

5.11本地数据文件

5.12系统分析

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

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

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

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

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

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

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

6.心得体会

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

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

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

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

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

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

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

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

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

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

7.参考资料

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

电子工业出版社,2010

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

清华大学出版社,2005

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

机械工业出版社,2007

8.附录

源程序

#include<

stdio.h>

stdlib.h>

string.h>

malloc.h>

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

{

charname[10];

//姓名

//学号

chardor[30];

//房号

//指向文件的指针

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"

person->

name);

while(strcmp(person->

name,"

#"

))//该循环用于控制学生信息的录入遇#结束{scanf("

%s%s%s"

num,person->

dor,person->

group);

fprintf(fp,"

%-10s%-10s%-10s%-10s\n"

name,person->

scanf("

}

fclose(fp);

voidreadfile()//文件读取函数

{printf("

\n请输入文件名:

//此处输入为文件的路径

r+"

))==NULL)

\n无法打开该文件:

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

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];

r"

\n无法打开该文件"

while(!

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

{inta,b,c,d;

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

if((fp=fopen(filename,"

))==NULL)//冒泡排序

{printf("

while(!

feof(fp))//外部循环

{

while(!

feof(fp))//内部循环

{

offset1=ftell(fp);

//获取文件内部当前指针位置fscanf(fp,"

%s%s%s%s\n"

strcpy(name1,person->

strcpy(num1,person->

num);

strcpy(dor1,person->

dor);

strcpy(group1,person->

if(feof(fp))

break;

//文件结束跳出循环

offset2=ftell(fp);

//获取文件内部下一指针位置fscanf(fp,"

strcpy(name2,person->

strcpy(num2,person->

strcpy(dor2,person->

strcpy(group2,person->

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);

num,num1);

dor,dor1);

group,group1);

fprintf(fp,"

person->

//排序后写入文件

name,name2);

num,num2);

strcpy(person->

dor,dor2);

group,group2);

//排序后写入文件

}

fseek(fp,offset2,SEEK_SET);

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

}

rewind(fp);

//指向头文件

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

{offset1=ftell(fp);

fscanf(fp,"

strcpy(num1,person->

if(feof(fp))

{a=1;

break;

d<

=0)

a=1;

//若a为1则有序

else

{a=0;

//a为0则无序

break;

fseek(fp,offset2,SEEK_SET);

if(a==1)

break;

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

}

if(a)break;

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

rewind(fp);

\n****************************************************************\n"

%40s\n"

"

输出的记录如下(已按学号排序)\n"

%-20s%-20s%-20s%-20s\n"

姓名"

学号"

房号"

班级"

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

{

************************************************************\n\n"

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

{intk=0;

charnamekey[10];

student*person;

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

"

namekey);

rb"

\n无法打开文件"

feof(fp))

%s%s%s%s\n"

if(!

strcmp(namekey,person->

name))

{printf("

\n\n已经为您找到以下是记录:

\n\n"

k=1;

}

if(!

k)

printf("

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

\n"

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

charxhkey[16];

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

xhkey);

\n无法打开文件"

exit(0);

strcmp(xhkey,person->

num))

\n\n已经为您找到以下是记录:

printf("

k)

\n\n没有关于该学号的任何信息\n"

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

charfhkey[30];

\n请您输入想要查找的房号"

fhkey);

{printf("

strcmp(fhkey,person->

dor))

{printf("

k=1;

\n\n没有关于此房号的任何信息\n"

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

a"

\n请您输入学生姓名学号房号班级\n"

%s%s%s%s"

per

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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