(此文档为word格式,下载后您可任意编辑修改!)
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
C语言程序设计
课程设计报告
课设题目:设备管理系统
专业:电气工程及其自动化
姓名:
成绩:
完成日期:2013年6月18日-2013年6月22日指导教师: 史旅华
目录
1.课程设计目的 (2)
2.需求分析 (2)
2.1要求 (2)
2.2任务描述 (2)
2.3运行环境 (3)
2.4开发工具 (3)
3.总体设计 (3)
3.1系统流设计 (3)
3.2系统模块设计 (4)
4.详细设计 (5)
4.1数据结构设计 (5)
4.2模块接口设计 (6)
4.3 以下是几个主要模块的流程图: (7)
5.运行结果 (10)
5.1主菜单界面: (10)
5.2信息录入界面: (10)
5.3信息浏览界面: (11)
5.4 信息查询界面: (11)
5.5信息修改界面: (12)
6.程序调试与测试 (12)
6.1程序调试 (12)
6.2程序测试 (12)
7.问题与不足 (12)
8.建议 (12)
9.编程体会 (12)
10.程序源代码: (12)
11.参考文献 (13)
12.用户使用手册 (13)
1.课程设计目的
1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进
行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运
用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高
效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获
得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
2.需求分析
2.1要求
1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解
决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分
析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C 程序等过程。
3)学会利用数组、结构体、链表进行相关信息表示。
4)功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能
描述
5)各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用
入口、功能、出口等关系正确。
6)所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清
晰。
7)界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示
信息,并对输入信息有较完善的值域分析。
8)程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的
结果。
9)学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误
的出现。
10)掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序
设计的基本方法。
11)C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄
袭现象。
2.2任务描述
此系统以设备、部门为背景,提供对设备、部门的购买、报废、查找、统计等功能。具体功能实现如下:
1)购买:输入设备编号、部门编号(购买),购买日期、设备数量,
完成购买的功能:需要判断设备编号、部门编号是否存在,设备数
量是否大于0,购须通过调用系统时间获得。
2)报废:输入设备编号、部门编号(报废),报废日期、设备数量,
完成报废功能:需要判断设备编号、部门编号是否存在,设备数量
是否大于0小于该部门当前正使用设备数量。报废日期格式是否合
法(格式为:YYYY-MM-DD,查询指定设备编号购买历史
3)指定部门报废设备的历史
4)统计指定日期公司各设备可以使用的数量
5)所有数据符合实际应用要求
2.3运行环境
1)WindowsXP7系统
2)VC++6.0编译环境
2.4开发工具
C语言
3.总体设计
3.1系统流设计
本系统的功能模块如图1所示,主要有以下模块:
图1系统功能模块图
3.2系统模块设计
1)主菜单界面:构造函数int main_menu(),实现课程设计名称的显示,
实现欢迎使用设备管理系统的显示,系统主菜单的显示。
2)读取显示设备信息:构造函数 void load_equipment(),实现设备
信息的读取及显示。
3)读取显示部门信息:构造函数void load_department(),实现部门
信息的读取及显示。
记录购买设备的信息:构造函数void save_buy(struct information * * *(struct information *(struct information *(struct information *(struct information * *
{
int ID;
int num;
char data[11];
char data1[11];
int style;
double price;
int number;
int number1;
double sum;
struct information *next;
};
4.2模块接口设计
1)所有函数模块声明如下:
void load(struct information *_menu();*主菜单*
void menu_select(int sel,struct information * *(struct information * * *(struct information *(struct information * *_menu(struct information * *scanf_add(struct information *();*显示购买和报废设备信息记录*
void show_menu(struct information * * *()为入口,调用int main_menu()函数,显示欢迎进入课程设计名称,直接进入主菜单界面,然后系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。
4.3 以下是几个主要模块的流程图:
1)主菜单函数:
图1 主函数流程图
2)购买设备函数:
3)信息修改函数:
5.运行结果
5.1主菜单界面:
图5主菜单界面输入功能选择,系统自动进入相应功能界面。
5.2设备信息界面:
图6 设备信息界面
5.3部门信息界面:
图7 部门信息界面
5.4 购买历史查询信息界面:
从键盘中输入选择,可以按设备编号和部门编号进行查询,并显示结果。
图8 通过设备编号查询的结果
5.5报废历史查询信息界面:
从键盘中输入选择,可以按设备编号和部门编号进行查询,并显示结
果。
图9 通过设备编号查询的结果5.6显示全部信息界面:
图10 显示全部信息界面
5.7设备信息报表:
6.程序调试与测试6.1程序调试
1. 购买设备
从键盘输入需要购买的设备以及购买设备的编号。
2. 报废设备
从键盘输入需要报废的设备信息。
6.2程序测试
1. 购买信息
从键盘输入需要查询的方式。
2. 报废信息
从键盘输入需要查询的方式。
7.问题与不足
(1)需求分析中存在的问题所有数据符合实际应用要求这一项没做好,导致所有数据都能随意输入,无论多大的数字都不会报错。
(2)概要设计中不存在什么问题。
(3)详细设计中存在的问题有不少地方都缺少报错,比如说输入设备数量时就算输入了英文也没有报错,反而把那个英文直接当做了1来处理。
(4)代码编制中存在的问题结构不够精炼,有些拖泥带水,缺少实际经验。
(5)调试和测试中不存在什么问题。
8.建议
对于签到,每次签到都会有好多人代签,这导致了签到的无意义,我觉得取消签到或者严格查签到才能解决。
9.编程体会
通过这次大规模的编程,我发现了自己的许多不足,我的各个重点都掌握的不牢固,导致我花费了大量的时间去复习,当我复习完了再开始编程已经比别人慢了一大步,我发现程序的每一步都紧密相关着,然后我在老师与同学的帮助下,终于完成了本次编程。
10.程序源代码:
#include int tm_mday; }; *定义设备结构体* #endif struct equipment{ int ID; char name[20]; }e[10]; *定义部门结构体* struct department{ int num; char name[20]; }d[4]; *购买和报废信息结构体* struct information{ int ID; *设备名称* int num; *部门编号* char date[11]; *购买日期* char date1[11]; *报废日期* int style; *设备类型* double price; *单价* int number; *购买数量* int number1; *报废数量* double sum; *总价* struct information *next; }; *函数的声明* void load(struct information *_menu(); *主菜单* void menu_select(int sel,struct information * *(struct information * * *(struct information *(struct information * *_menu(struct information * *scanf_add(struct information *(); * 显示购买和报废设备信息记录* void show_menu(struct information * * *(_menu("); printf("********* 谢谢使用! **********\n"); ****\n"); printf("**** XXX ****\n"); exit(0); } } *显示主菜单界面* int main_menu() { int i; printf(" \1**********欢迎使用设备管理系统 ********************\1\n"); printf(" \1*** 1.查询设备信息 ***\1\n"); printf(" \1*** 2.查询部门信息 ***\1\n"); printf(" \1*** 3.购买设备 ***\1\n"); printf(" \1*** 4.报废设备***\1\n"); printf(" \1*** 5.设备的购买历史查询***\1\n"); printf(" \1*** 6.设备的报废历史查询***\1\n"); printf(" \1*** 7.剩余使用次数***\1\n"); printf(" \1*** 8.显示全部信息***\1\n"); printf(" \1*** 9.设备信息报表***\1\n"); printf(" \1*** 0.退出菜单***\1\n"); printf(" \1**************************************************\1\n"); while(1) { printf ("请选择你所需要的操作序号(0~9):"); do{ scanf("%d",&i); if(i<0||i>9) printf("输入有误,请重新输入(0~9):"); rewind(stdin); }while(i<0||i>9); system("cls"); break; } return i; } *读取显示设备信息* void load_equipment() { FILE *fp; struct equipment *pt1=e; system("cls"); if ((fp=fopen("设备名称.txt","r"))==NULL) { printf ("打开错误!\n"); exit (0); } printf ("**********************************设备信息界面*******************************"); printf ("\n\t 设备编号(1~10) 设备名\n");