常州大学怀德学院课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
班级:计算机141 学号: 144160134 姓名: 周尧明
课 程 设 计
设计课程名称 C语言课程设计
题 目 1 多文件系统设计
2链表结构系统设计 3 订餐管理系统设计
C语言课程设计任务书
一、设计题目
1 多文件系统设计 2链表结构系统设计 3 订餐管理系统设计
二、C语言课程设计的目的和意义
C语言课程设计是C语言程序设计课程的一个重要的环节。它是根据教学
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
的要求,在老师指导下,对学生实施程序设计训练的必要过程,是对前期课堂教学效果的检验。其目标在于培养学生综合应用理论知识来分析和解决实际问题的能力。
通过本次课程,要求学生能够遵循软件开发过程的基本规范,应用结构化程序设计的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,按照题目要求,独立完成设计任务,使学生更加深刻地理解和掌握C语言的基本概念、语言特点和编程技巧,为以后相关课程的学习打下良好基础。
三、设计内容
本课程设计的内容分三个阶段来完成。各部分目的及内容:
任务一 多文件系统设计
目的:
(1)树立项目意识,体验C语言的模块化设计风格;
(2)掌握函数调用及其参数传递的方法;
(3)学习多文件程序的编写和调试方法;
(4)学习基于软件工程的项目实现方法和文档编写方法。
内容和要求:
(1)使用多文件结构形式完成本设计。
(2)使用数组结构存储学生的成绩,通过函数调用实现学生成绩的增加、显示、指定成绩的删除、查找和排序。
(3)为各项操作功能设计菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4)各功能使用相应的函数实现,各函数包含在不同的文件中。
(5)构造独立的头文件,包含所需的所有的头文件和函数原型说明。
(6)设计报告包括课题的需求分析、系统设计、详细设计、系统实现和测试。
(7)扩展:
① 性能扩展,指用户使用的友好程度体验。
(1)成绩的有效性判断;(2)部分选单功能必要的循环操作,等。
② 功能扩展:(1)添加功能; (2)成绩从文件度读、写功能,等。
任务二 链表结构系统设计
目的:
(1)熟悉使用结构体和链表进行复杂数据的表示方法 ;
(2)掌握结构体和链表数据的的常用操作的实现方法;
(3)熟悉一个完整的信息管理软件的开发流程、设计和表示方法。
内容和要求:
(1) 使用多文件结构形式完成本设计。基本要求同任务一:通过函数调用实现学生成绩的增加、显示、指定成绩的删除、查找和排序功能。各功能使用相应的函数实现,各函数包含在不同的文件中。为各项操作功能设计菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(2) 使用结构体存储每位学生的信息(包括成绩),将多位学生的信息以链表方式组织。
(3)使用指针操作访问学生结构体数组的每一个学生信息。
(4)使用动态申请和释放内存函数完成对学生信息的增删操作。
(5)构造独立的头文件,包含所需的所有的头文件和函数原型说明。
(6)设计报告包括课题的需求分析、系统设计、详细设计、系统实现和测试。
(7)扩展:如任务一。
任务三 订餐管理系统设计
目的:
(1)熟悉使用软件工程的思想完成一个信息系统的设计步骤和方法。
(2)熟悉软件设计各步骤表示的常用工具。
(3)掌握使用C语言进行多文件程序编写和调试的方法。
内容和要求:
(1)使用多文件结构形式完成本设计。
(2)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(2)使用链表结构存储订餐信息,通过函数调用实现订餐信息添加、查询、删除、输出和排序。
(3)为各项操作功能设计菜单。应用程序运行后,先显示主菜单,然后用户通过菜单项选择希望进行的操作项目。
(4)各功能使用相应的函数实现,各函数包含在不同的文件中。
(5)构造独立的头文件,包含所需的所有的头文件和函数原型说明。
(6)设计报告包括课题的需求分析、系统设计、详细设计、系统实现和测试。
(7)扩展:
① 性能扩展,指用户使用的友好程度体验。
(1)添加订餐信息;(2)部分选单功能必要的循环操作,等。
② 功能扩展:(1)添加功能; (2)订餐信息从文件度读、写功能,等。
课程设计的排版要求
一、总体要求
1、 纸型:A4;
3、页面设置:左、右、下边距为2.5厘米,上边距为2.8厘米,页眉和页脚均为2.0厘米(页眉页脚如该文档);
4、行间距:固定值18磅;
5、中文采用宋体字体,西文、数字等符号均采用Times New Roman字体。
二、课程设计正文排版要求
1 题名(宋体 小四号 粗体)(段前、段后0.5行)
说明:章、节编号全部顶格排,编号与标题之间空1个字的间隙。
1.1 题名(宋体 五号 粗体)(段前、段后0.5行)
1.1.1 题名(宋体 五号 粗体)(段前、段后0.5行)
×××××××××××××××××××××××××××××××
×××××××××××××(内容:宋体 五号,段前距和段后距均为0磅;)
三、页眉和页脚
常州大学怀德学院课程设计(字体:宋体、五号) 学号:姓名:
第 页 共 页
四、设计要求
1、编写源程序的要求:
(1) 实现任务书中的所有功能,可扩展;
(2) 尽可能使界面友好、直观、易操作;
(3) 源程序要有注释,使程序容易阅读;
(4)使用多文件实现。
2、撰写“课程设计报告”,要求如下:
(1)封面:统一采用《常州大学课程设计说明书》封面格式
(2)任务书
(3)目录
(4)正文。每部分按各自的要求编写,依次按照任务一、任务二和任务三完成。
3、 “课程设计报告”排版要求:
4、课程设计答辩验收要求:
(1)运行所设计的系统;
(2)回答有关问题;
(3)电子稿:提交源程序和课程设计报告电子稿,打包上传至网络课堂相关节点
书面稿:提交课程设计报告书面稿
五、进度安排
1 任务一 多文件系统设计:16学时+课外
2 任务二 链表结构系统设计:16学时+课外
3任务三 信息系统设计
系统分析和系统设计阶段:4学时+课外
编程及系统调试阶段:22学时 +课外
总结和书写课程设计报告阶段:课外
考核阶段:2学时
六、设计时间:
2015 年 6 月26 日到 2015 年7 月 17 日
参考文献(宋体 小四号 粗体)
内容: (中文用宋体五号,西文、数字等符号均采用Times New Roman字体):
[序号]作者.文献题名[M].出版地:出版者,出版年.起止页码
如:
[1]毛利锐,沈灌群.中国教育通史[M].济南:山东教育出版社,1988.20-22
[2]中国力学学会.第三届全国实验流体力学学术会议论文集[C].天津:1990.
[3]李晓东,张庆红,叶瑾琳.气候学研究的若干理论问题[J].北京大学学报:自然科学版,1995,35(1):101-106.
目 录
任务一 多文件系统设计….……………………………………..........….............……………………………1
1 问题描述.……...…………………………………………………………….……………………………1
2 系统设计……...…………………………..………………………...…………………………………….1
2.1 系统功能结构图.…………………..………………....….……………………………………………..1
2.2 系统流程设计图….…………..…….…….……...…….….……….…………………………………..1
2.3 系统文件结构图…………………..…………...……………………………………………..2
3 详细设计 ………...……………………………..………………………...………………………………….2
3.1文件和自定义函数间的关系………………... .….……. .……….….…………….………………….2
3.2 函数之间调用关系.…………………………………...……………………………………………….3
3.3 函数设计………………..……………………………...……………………………………………….4
4 系统实现……….........................…....…………...……………………………………………….7
5 系统测试和结果………..……………...…………………………..……………………………….12
任务二 链表结构系统设计…………………..........….............……………………………16
1 问题描述………………………………………………………….……………………………16
2 系统设计………………………..………………………...…………………………………….16
2.1 系统功能结构图…..………………... .….……………………………………………..16
2.2 系统流程设计图..…….…….……...…….….……….…………………………………..16
2.3 数据设计……………......…………………..…………...……………………………………………17
2.4 系统文件结构图……..…………...……………………………………………..17
3 详细设计…………………………..………………………...………………………………….18
3.1结构体定义………………... .….……. .……….….…………….………………….18
3.2文件和自定义函数间的关系.……. .……….….…………….………………….18
3.3 函数之间调用关系……………………...……………………………………………….19
3.4 函数设计..……………………………...……………………………………………….19
4 系统实现…….........................…....…………...……………………………………………….20
5 系统测试和结果……..……………...…………………………..……………………………….25
任务三 订餐信息系统设计…..………………………………..........….............……………………………27
1 问题描述…………………………………………………...………………………………………………27
2 系统分析……………………………………………………...………………………………………………27
2.1 课题的基本要求…………..………………………….…..…………………………………………..27
2.2 输入/输出要求…………..…………………………….…...…………………………………………28
2.3 数据分析………………………………………………...…………………………………………….28
2.4 系统操作流程分析………….....……………………...……………………….……………………..28
3 系统设计……………………………………………………...………………………………………………29
3.1 数据设计…………….………………………………………………………………………………….29
3.2 系统功能结构设计…………….………………………………………………………………………30
3.3 输入/输出设计…………..…………………………….…...…………………………………………31
3.3.1 输入设计…………..………………………….…...…………………………………………31
3.3.2 输出设计………….…………………………….…...…………………………………………31
3.4 设计过程中的重点和难点…………….…………………………………………………………….31
4 详细设计…………………..………………………………………………………………………………32
4.1数据定义…………………….………………... .….……. .……….….…………….…………………32
4.2文件和自定义函数间的关系……………………...……. .……….….…………….…………………33
4.3 函数之间调用关系……………..……………………...………………………………………………33
4.4 函数设计………………..……………………………...………………………………………………34
5 系统实现……………..…………………………………………………………...…………………………37
5.1 系统构架(文件组织结构)…………………………………………………………………………37
5.2 源程序清单……………………………………………………………………………………………37
5.3实现中的重点和难点…………….………………………….………………………………………...50
5.4遇到的问题及解决…………….…………………………….………………………………………...50
6 测试和结果分析总结……………………………………………………………...………………………..50
6.1 测试和结果…………….……………………………………………………………………………...51
6.2 结果分析…………….………………………………………………………………………………...56
7 系统使用说明………………………………………………………………...……………………………..56
8 结论…………………………………………………………………………………...……………………..57
8.1课题完成情况说明.…………….………………………………………………………………………57
8.2系统的亮点………….………………………………………………………………………………57
8.3系统的不足…………..………………………………………………………………………………57
8.4系统可能的改进和扩展……………… ………………………………………………………………57
总结………….………………………….……………………………………...………………………………..57
参考文献…………………..……………………………………………………...……………………………..57
致谢………….………………………….……………….……………………...………………………………58
任务一 多文件系统设计
1 问题描述
本系统是用于管理学生的成绩,通过本系统可以实现成绩的输入、排序、查询、删除、插入、显示的功能,并且还可以显示所有学生的成绩。
2 系统设计
2.1系统功能结构图
如图1所示
学
生
成
绩
管
理
系
统
删除学生成绩
查询学生成绩
显示学生成绩
排序学生成绩
输入学生成绩
插入学生成绩
图1 系统功能结构图
学生成绩管理系统分为6个部分,分别为输入学生成绩、删除学生成绩、查询学生成绩、显示学生成绩、排序学生成绩、插入学生成绩。
2.2系统流程设计图
如图1所示
欢迎界面
进入菜单选项
1.
成绩输入,并判断是否有效
3.
成绩循环查询
5.
显示成绩
2.
成绩循环删除
4.
成绩排序
0
退出系统
.
6.
循环插入成绩和判断插入的成绩是否有效
图1 系统流程设计图
该系统会先进入欢迎界面,然后出现7个菜单,1.成绩输入,并判断是否有效,2成绩循环删除,3成绩循环查询,4成绩排序,5显示成绩,6循环插入成绩,0退出系统。
3.1数据设计
2.3系统文件结构图
如图3所示
main.c------
主函数
input.c------
成绩输入
del.c---------
成绩删除
find.c--------
成绩查询
insert.c------
成绩插入
menu.c------
主菜单
sort.c--------
成绩排序
display.c----
成绩显示
task.h--------
头文件
图3系统文件结构图
首先建立一个工程名为task1.h,然后建立8个源文件和一个头文件,分别为删除成绩、显示成绩、查询成绩、输入成绩、插入成绩、主菜单、主函数。
3 详细设计
3.1文件和自定义函数之间的关系
文件名
文件所对应的函数
功能说明
main.c
void main()
主函数,进行选择功能选项
menu,c
void menu()
主菜单,输入功能选项
input.c
int input(floata[],int n)
输入成绩,并对数据有效判断
del.c
int del(float a[],int n)
删除成绩,可以循环删除
find.c
void find(float a[],int n)
查询成绩,可以循环查询
sort.c
void sort(floata[],int n)
成绩从高到低排序
display.c
void display(floata[],int n)
显示成绩
insert.c
int insert(float a[],int n)
插入成绩,如果在成绩表中存在,输出提示信息;如果不在,将其插入在表的末尾。然后输出整个表。
图4文件和自定义函数的关系
3.2 函数之间调用关系
如图5所示
main()
m
enu
()
i
nput
()
d
el
()
sort()
display()
i
nsert
()
exit()
f
ind
()
图5 函数之间调用关系
3.3 函数设计
(1)主函数
A.函数原型:void main( )
B.功能:显示学生成绩管理系统的7个功能选项
C.入口参数:无
D.出口参数:无
E.描述:定义一个数组来储存成绩,通过调用函数实现相应的功能。
(2)菜单函数
A.函数原型:void menu( )
B.功能:显示菜单界面
C.入口参数:无
D.出口参数:无
E.描述:输出显示菜单选项
(3)学生成绩的输入
A.函数原型:int input(floata[],int n)
B.功能:输入学生的实际人数与学生的成绩并保存到数组中,然后将输入的数据带回main函数
C.入口参数: a[i] 保存学生的成绩;
n:学生人数
D.出口参数:n:学生实际人数
n:学生实际人数
E .描述:先输入学生人数,再输入学生成绩,并判断成绩是否有效,无效从新输入。打开文件,将学生成绩写入文件中,最后关闭文件。
(4)删除学生成绩
A.函数原型:int del(float a[],int n)
B.功能:输入要删除的成绩
C.入口参数: a[i] 保存学生的成绩;
n:学生人数
D.出口参数:n:学生实际人数
E .描述:输入要删除的成绩,若输入数不存在,就输出不存在,并用循环判断是否继续。
(5)查询学生成绩
A.函数原型:void find(float a[],int n)
B.功能:输入要查询的成绩
C.入口参数: a[i] 保存学生的成绩;
n:学生人数
D.出口参数:无
E .描述:输入要查询的成绩,若输入的成绩不存在,就输出不存在,并用循环判断是否继续。
(6)排序学生成绩
A.函数原型:void sort(floata[],int n)
B.功能:成绩排序
C.入口参数:a[i] 保存学生的成绩;
n:学生人数
D.出口参数:无
E .描述:对成绩排序并输出。
(7)查询学生成绩
A.函数原型:void find(float a[],int n)
B.功能:输入要查询的成绩
C.入口参数:a[i] 保存学生的成绩;
n:学生人数
D.出口参数:无
E .描述:输入要查询的成绩,若输入的成绩不存在,就输出不存在,并用循环判断是否继续。
(8)显示学生成绩
A.函数原型:void display(floata[],int n)
B.功能:成绩显示
C.入口参数:a[i] 保存学生的成绩;
n:学生人数。
D.出口参数:无
E .描述:打开文件将数据从文件中读出,并把成绩输出,最后再关闭文件。
(9)插入学生成绩
A.函数原型:int insert(float a[],int n)
B.功能:成绩插入
C.入口参数:a[i] 保存学生的成绩;
n:学生人数
D.出口参数:n:学生实际人数
E .描述:先输入要插入的成绩,判断数据是否有效,若有效将其插入到数组末端,并用循环判断是否继续。
4.系统实现
(1) 头文件task.h
#include"stdio.h" //定义输入输出头文件
#include"stdlib.h" //定义清屏头文件
#include"conio.h" //定义通过控制台进行数据输入和数据输出
#define SIZE 80 //宏定义,学生人数最大值为80
FILE *fp; //定义文件
int inpput(float a[],int n);
int del(float a[],int n);
void find(float a[],int n);
void sort(float a[],int n);
void display(float a[],int n);
int insert(float a[],int n);
void menu();
(2) 主函数main.c
#include"task.h"
void main() //系统主函数
{ int j,num;
float score[SIZE];
while(1)
{menu();
scanf("%d",&j); //输入读取的选项的数字
switch(j) //判断所选项目
{case 1: num=inpput(score,num);break;
case 2: num=del(score,num);display(score,num);break;
case 3: find(score,num);break;
case 4: sort(score,num);display(score,num);break;
case 5: display(score,num);break;
case 6: num=insert(score,num);display(score,num);break;
case 0: exit(0);
}
}
}
(3) 主菜单 menu.c
#include"task.h"
void menu() //主菜单显示
{
system("cls"); //清屏
printf("\n\n\n\t\t\t 欢迎使用学生成绩管理系统\n\n\n");
printf("\t\t\t*********************************\n");
printf("\t\t\t* 主菜单 *\n");
printf("\t\t\t*********************************\n\n\n");
printf("\t\t 1 成绩输入 2 成绩删除\n");
printf("\t\t 3 成绩查询 4 成绩排序\n");
printf("\t\t 5 显示成绩 6 成绩插入\n");
printf("\t\t 0 退出系统\n");
printf("\t\t 请选择[1//2/3/4/5/6/0]:");
}
(4) 成绩输入 input.c
#include"task.h"
int inpput(float a[],int n) //成绩输入
{
int i;
system("cls");
if((fp=fopen("text","wb"))==NULL) //打开文件判断
{
printf("cannot openn file");
exit(1);
}
printf("\n请输入学生人数(1—80):");
scanf("%d",&n); //学生人数显示
printf("\n请输入学生成绩:");
for(i=0;i
100) //数据是否有效判断
{ printf("数据%.1f无效,继续输入\n",a[i]);
scanf("%f",&a[i]);
}
}
for(i=0;i=n)
printf("找不到!\n");
printf("\n结束请按0,继续请按1:");
scanf("%d",&b);
}while(b); //循环查找i
fclose(fp);
printf("按回车返回:");
getch();
}
(8) 学生成绩查询find.c
#include"task.h"
void find(float a[],int n) //成绩查询
{
int i,b;
float m;
system("cls"); //清屏
if((fp=fopen("text","r"))==NULL) //以读的方式打开文件
{
printf("cannot read file");
exit(1);
}
for(i=0;i=n)
printf("找不到!\n");
printf("\n结束请按0,继续请按1:");
scanf("%d",&b);
}while(b); //循环查找i
fclose(fp);
printf("按回车返回:");
getch();
}
(9)学生成绩插入 insert.c
#include"task.h"
int insert(float a[],int n) //成绩插入
{
int b,i;
float c;
system("cls"); //清屏
if((fp=fopen("text","w"))==NULL) //打开文件
{
printf("cannot read file");
exit(1);
}
for(i=0;i100) //判断输入的成绩是否有效
{ printf("\n%.1f数据错误,继续输入:\n",c);break;}
if(i>=n) a[n++]=c;
printf("\n结束请按0,继续请按1:");
scanf("%d",&b);
}while(b); //循环插入
for(i=0;idate.num,p1->date.name,&p1->date.score); //输入学生信息
if(p1->date.score>=0&&p1->date.score<=100) //学生信息判断
{
if(n==1)
h=p1;
else p2->next=p1;
p2=p1;
n++;
}
else
printf("成绩无效,继续输入");
printf("继续请按1,结束请按0:");
scanf("%d",&j);
}while(j); //循环输入学生信息
p2->next=NULL;
printf("按回车键返回:");
getch();
return h;
}
(5) 学生信息删除 zym_del.c
#include"zym_task2.h"
STU* del(STU*h) //学生学习删除
{
int i,j,k=0,m;
STU*p1,*p2;
int num;
system("cls");
do{
printf("当前学生的信息是:\n");
for(p1=h;p1!=NULL;p1=p1->next) //输出当前学生信息
printf("%d\t%s\t%.1f\n",p1->date.num,p1->date.name,p1->date.score);
printf("\n");
if(h==NULL)
return h;
printf("请输入要删除的学生的学号:");
scanf("%d",&num); //输入要删除的学生的学号
for(p1=h;p1!=NULL;p1=p1->next)
if(num==p1->date.num)
break;
else p2=p1;
if(p1)
{
if(p1==h)
h=p1->next;
else
p2->next=p1->next;
printf("删除成功\n");
free(p1);
}
else
printf("找不到要删除的成绩\n");
printf("继续请按1,结束请按0:");
scanf("%d",&m);
}while(m); //循环删除学生的信息
printf("按回车键返回:");
getch();
return h;
}
(6) 学生信息排序 zym_scort.c
#include"zym_task2.h"
STU *scort(STU * h) //学生信息排序
{
DATA t;
STU *p1,*p2;
for(p1=h;p1->next;p1=p1->next) //冒泡排序
for(p2=p1->next;p2;p2=p2->next)
if((p1->date.score)<(p2->date.score))
{
t=p1->date;
p1->date=p2->date;
p2->date=t;
}
printf("\n输出排序结果:\n");
for(p1=h;p1;p1=p1->next) //输出排序后的结果
printf("%d\t%s\t%.1f\n",p1->date.num,p1->date.name,p1->date.score);
printf("\n");
printf("按回车键返回:");
getch();
return h;
}
(7)学生信息显示 zym_display.c
#include"zym_task2.h"
void display(STU *h) //输出学生信息
{
STU *p;
system("cls"); //清屏
printf("学号\t姓名\t成绩\n");
for(p=h;p;p=p->next) //输出学生信息
printf("%d\t%s\t%.1f\n",p->date.num,p->date.name,p->date.score);
printf("\n");
printf("按回车键返回:");
getch();
}
(8) 学生信息查询 zym_find.c
#include"zym_task2.h"
void find(STU*h) //学生信息查询
{
int k=0,j;
int num;
STU * p;
system("cls");
if(h==NULL) return;
do{
printf("\n请输入要查询的学号:");
scanf("%d",&num); //输入要查询的学生的学号
for(p=h;p;p=p->next)
if(num==p->date.num)
{
printf("已找到:");
printf("%d\t%s\t%.1f\n",p->date.num,p->date.name,p->date.score);
break;
}
if(p==NULL)
printf("找不到!\n");
printf("继续请按1,结束请按0:");
scanf("%d",&j);
}while(j); //循环查询学生信息
printf("按回车键返回:");
getch();
}
(9) 学生信息插入zym_insert.c
#include"zym_task2.h"
STU *insert(STU *h) //学生信息插入
{
int m;
STU *p1,*p2,*s;
system("cls"); //清屏
do{
printf("请输入要插入的学生的信息:\n学号\t姓名\t成绩\n");
s=(STU*)malloc(sizeof(STU));
scanf("%d\t%s\t%f",
&s->date.num,s->date.name,&s->date.score); //要插入的学生信息输入
s->next=NULL;
for(p1=h; p1; p2=p1,p1=p1->next) //判断学号是否相同
if(s->date.num==p1->date.num)
{
printf("学号相同!插入错误!"); break;
}
if(!p1)
{ p2->next=s;
printf("插入成功\n");
}
printf("继续请按1,结束请按0:");
scanf("%d",&m);
}while(m); //循环插入成绩
printf("按回车键返回:");
getch();
return h;
}
5.系统测试结果
(1)进入欢迎界面:如图所示
(2)学生信息输入:如图所示
(3) 学生信息删除:如图所示
(4)学生信息查询:如图所示
(5)学生信息排序:如图所示
(6)显示学生信息:如图所示
(7)插入学生信息:如图所示
任务三 订餐管理系统设计
1 问题描述
本项目要求完成一个订餐管理系统,至少包含客户信息( 编号,姓名,电话和详细地址)和客户订餐信息。客户订餐时要求
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
客户信息,种类(假设有10种套餐),数量,送货时间和状态(已送,未送)。系统应能对这些基本信息进行管理,具有订餐信息查询、添加、删除、统计和显示的功能。
2 系统分析
2.1 课题基本要求
(1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单选项选择希望进行的操作项目。
(2)添加订餐信息时,有一定兼容性,能重复输入操作。
(3)订餐信息可按客户ID或客户姓名查询。
(4)订餐信息可按客户ID或客户姓名删除。
(5)所有订餐信息输出。
(6)插入订单信息。
(7)订餐统计(统计每天每种套餐的订单数量)。
(8)订餐信息排序(按照订单数量)。
(9)系统验证用户名和密码。
(10)将数据写入和结果保存在文件order.out中,订餐信息可至保存(至文件),也可查看(从文件中),并且数据随订餐的改变而改变。
2.2输入\输出要求
总体要求:界面友好,系统易用。
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
(3)信息输出语义清晰,格式整齐、美观。
2.3数据分析
程序中所用到的数据包括:客户ID,姓名,电话,详细地址,套餐种类,送货时间。
2.4系统操作流程分析
本函数所包含的功能和含义如下:
(1)用户信息初始化:录入用户的账号和密码,保存到文件password.out中。
(2)用户登录:打开文件password.out,验证输入账号和密码,若正确就进入应用系统,三次不正确就退出系统。
(3)添加订餐信息:有一定兼容性,能重复输入操作,将信息保存到文件order.out中。
(4)订餐信息查询:先打开文件order.out,读取数据,可按电话号码或客户姓名查询。
(5)订餐信息删除:先打开文件order.out,读取数据,可按客户ID或客户姓名删除。
(6)订餐信息输出:先打开文件order.out,读取数据,输出所有订餐信息。
(7)订餐统计:先打开文件order.out,读取数据,统计每天每种套餐的订单数量并输出。
(8)订餐信息排序:先打开文件order.out,读取数据,按照每种每天套餐订单数量排序并输出。
(9)保存至文件:将订餐信息都保存至文件order.out中。
(10)从文件中读取:从文件order.out中读取订餐各项信息。
(11)退出程序。
2.4.1系统流程设计图
如图1所示
欢迎界面
用户信息初始化
用户登录
订餐管理系统
-
菜单
从文件中读取数据
退出系统
查询订餐信息
输入订餐信息,
并写入文件
删除订餐信息
从文件中读取数据
从文件中读取数据
按每一种套餐的订餐数量排序
输出订餐信息
统计
每一种套餐订餐数量
按
用户
姓名删除
按用户电话号码删除
按
用户电话号码
查
询
按
用户姓名查询
关闭文件
关闭文件
关闭文件
图1系统流程设计图
3 系统设计
3.1数据设计
(1)用户登录信息
账号 char ID[20] 20位长的字符串
密码 char Password[32] 20位长的字符串
(2)客户信息
姓名 char name[20] 20位长的字符串
电话 long Tel 长整型数据
地址 char Adress[32] 32位长的字符串
(3)客户订餐信息
套餐类型 int type[20] 20个整型数据
每个套餐数量 int number[20] 20个整型数据
(4)日期成员
年 int year 整型数据
月 int month 整型数据
日 int day 整型数据、
3.2系统功能结构设计
订餐管理系统
订餐管理系统
用户登录
输入订餐信息
查询订餐信息
按
用户姓名查询
按用户
ID
删除
按
用户
姓名删除
插入订餐信息
统计订餐信息
输出订餐信息
排序订餐信息
将数据写入文件
从文件中读取数据如图2所示
删除订餐信息
按
用户
ID
查
询
图2系统功能结构设计
3.3 输入/输出设计
3.3.1输入设计
(1)用户账号和密码录入,以及登陆信息
账号 char ID[20]
密码 char Password[32]
(2)客户信息输入
姓名 char name[20]
电话 long Tel
地址 char Adress[32]
(3)客户订餐信息输入
套餐类型 int type[20]
每个套餐数量 int number[20]
(4)订餐日期输入
年 int year
月 int month
日 int day
3.3.2输出设计
(1)客户订餐信息
输出格式如下:
客户编号:******
客户姓名:******
客户电话:**************
输出订餐信息:
所定套餐:***
数量为:**
订餐日期:****年**月**日
(2)每一种套餐的当天销售数量
输出格式如下:
套餐1=** 套餐2=** 套餐3=** 套餐4=** 套餐5=**
套餐6=** 套餐7=** 套餐8=** 套餐9=** 套餐10=**
(3)每一种套餐的当天销售数量排序后的结果(从高到低输出)
输出格式如下:
套餐*销售数量为:******
套餐*销售数量为:******
套餐*销售数量为:******
套餐*销售数量为:******
3.4 设计过程中的重点和难点
重点:(1)用户的登录系统
(2)结构体的嵌套
(3)文件的写入和读取
(4) 订餐信息循环删除
(5)订餐信息循环查询
(6)订餐信息插入
(7)函数之间的循环调用
难点:每一种套餐的统计
4 详细设计
4.1数据定义
struct dingcan
{
char type[10];
int number;
};
struct date
{
int year;
int month;
int day;
};
struct information
{
char ID[20] ;
char name[20];
char Tel[30];
char Adress[32];
struct dingcan order1;
struct date time;
}str[N];
struct login
{
char ID[20] ;
char Password[32];
}member[M];
FILE *fp;
struct information *p;
struct login *p;
#define N 100
#define M 100
int i,m;
char c;
int i,j,n,k,c[10,t;
char a[20],b[20];
4.2文件和自定义函数间的关系
文件名
文件所对应的函数
功能说明
zym_main.c
void main()
主函数,进行选择功能选项
zym_menu.c
void menu()
主菜单,输入功能选项
zym_ entering.c
void entering()
录入用户账号和密码
zym_ come.c
void come()
登陆订餐管理系统
zym_ input.c
void input()
输入订餐信息,可循环输入订餐信息,可插入订餐信息
zym_ statistics.c
void statistics()
统计每天每种套餐的订单数量。
zym_ scort.c
void scort()
每天每种套餐的订单数量排序
zym_ del.c
void del()
删除订餐信息,可选择按电话号码删除和按客户姓名删除,能重复删除操作。
zym_ del1.c
void del1()
客户撤单时,可按电话号码删除
zym_ del1.c
void del2()
客户撤单时,可按客户姓名删除
zym_find.c
void find()
删除订餐信息,可选择按电话号码删除和按客户姓名删除,能重复删除操作。
zym_find1.c
void find1()
查询订餐信息时,可按电话号码查询
zym_find2.c
void find2()
查询订餐信息时,可按客户姓名查询
zym_ display.c
void display()
学生成绩显示
zym_ saveinformation.c
void saveinformation()
将订餐信息存入文件
zym_ import.c
void import()
从文件中将订餐信息读出
zym_ saveinformation2.c
void saveinformation2()
将用户账号和密码存入文件
zym_ import.c
void import()
从文件中将账号和密码读出
4.3函数之间调用关系
v
oid in
statistics()
void find
()
void input
()
void main()
void menu
()
v
oid find1
()
v
oid find2
()
void import
()
void import
()
V
oid saveinformation
()
v
oid del
()
v
oid del2
()
v
oid del1
()
void import
()
void disply
()
void import
()
void scort()
void import
()
V
oid saveinformation
()
4.4 函数设计
(1) 主函数
A.函数原型:void main()
B.功能:显示订餐信息管理系统的6个功能。
C.入口参数:无
D.出口参数:无
E.通过键盘的输入,实现函数调用从而实现相应的功能。
(2) 菜单函数
A.函数原型:vois menu()
B.功能:显示菜单主界面。
C.入口参数:无
D.出口参数:无
E.描述:输出菜单选项。
(3) 订餐信息输入和插入
A.函数原型:void input()
B. 功能:输入订餐信息和插入订餐信息。
C.入口参数:无
D. 出口参数:无
E.描述:输入订餐信息和插入订餐信息,可循环操作,将订餐信息写入文件,再关闭文件。
(4) 订餐信息删除主菜单
A.函数原型:void del()
B.功能:显示订餐信息删除主界面。
C.入口参数:无
D.出口参数: 无
E.描述:通过键盘的输入,实现函数调用从而实现按客户电话号码删除或按客户姓名删除的功能,可循环操作。
(5) 按客户电话号码删除
A.函数原型:void del1()
B.功能:按客户电话号码删除。
C.入口参数:无
D.出口参数: 无
E.描述:打开文件,按客户电话号码删除,找到要删除位置,将其后边的数组每一个向前移,从而达到删除的目的,删除完毕后,将剩余的数据写入文件,再关闭文件。
(6) 按客户姓名删除
A.函数原型:void del2()
B.功能:按客户姓名删除。
C.入口参数:无
D.出口参数: 无
E.描述:打开文件,按客户姓名删除,找到要删除位置,将其后边的数组每一个向前移,从而达到删除的目的,删除完毕后,将剩余的数据写入文件,再关闭文件。
(7) 订餐信息查询主界面
A.函数原型:void find()
B.功能; 显示订餐信息查询主界面。
C.入口参数:无
D.出口参数:无
E.描述:通过键盘的输入,实现函数调用从而实现按客户电话号码查询或按客户姓名查询的功能,可循环操作。
(8) 按客户电话号码查询
A.函数原型:void find1()
B.功能; 按客户电话号码查询。
C.入口参数:无
D.出口参数:无
E.描述:打开文件,按客户电话号码查询,查询完毕后,关闭文件。
(9) 按客户姓名查询
A.函数原型:void find1()
B.功能; 按客户姓名查询。
C.入口参数:无
D.出口参数:无
E.描述:打开文件,按客户姓名查询,查询完毕后,关闭文件。
(10)插入订餐信息
A.函数原型:void insert( )
B.功能:插入订餐信息
C.入口参数:无
D.出口参数:无
E.描述:打开文件,将要插入的订餐信息插入到数组末端,最后再将所有订餐信息写入文件,再关闭文件。
(11)统计订餐中的套餐信息
A.函数原型:void statistics()
B.功能:统计当天中的每一种套餐销售数量
C.入口参数:无
D.出口参数:无
E.描述:打开文件,统计当天中的每一种套餐销售数量,统计完毕后并输出,再关闭文件。
(12)排序订餐中的套餐销售信息
A.函数原型:void scort()
B.功能:排序当天中的每一种套餐销售数量
C.入口参数:无
D.出口参数:无
E.描述:打开文件,调用统计函数,排序当天中的每一种套餐销售数量,并按从高到底输出,完毕后,再关闭文件。
(13)订餐信息显示
A.函数原型:void display( )
B.功能:订餐信息显示
C.入口参数:无
D.出口参数:无
E.描述:打开文件读取数据,将所有客户的订餐信息显示出来,再关闭文件。
(14)订餐信息保存
A.函数原型:void saveinformation()
B.功能:信息保存
C.入口参数:无
D.出口参数:无
E.描述:以写的方式打开文件,将订餐信息保存到文件,再关闭文件。
(15)订餐信息读取
A.函数原型:void import()
B.功能:订餐信息保存
C.入口参数:无
D.出口参数:无
E.描述:以读的方式打开文件,将信息从文件中读取出来,再关闭文件。
(16)用户账户和密码信息保存
A.函数原型:void saveinformation2()
B.功能:用户账户和密码信息保存
C.入口参数:无
D.出口参数:无
E.描述:以写的方式打开文件,将用户账户和密码信息保存到文件,再关闭文件。
(17)用户账户和密码信息读取
A.函数原型:void import2()
B.功能:用户账户和密码信息读取
C.入口参数:无
D.出口参数:无
E.描述:以读的方式打开文件,将用户账户和密码信息从文件读取出来,再关闭文件。
(18)录入用户账号和密码
A.函数原型:void entering()
B.功能:录入用户账号和密码
C.入口参数:无
D.出口参数:无
E.描述:输入用户账号和密码,可循环操作,打开文件,将账号和密码写入文件,再关闭文件。
(19)订餐管理系统登陆
A.函数原型:void come()
B.功能:订餐管理系统登陆
C.入口参数:无
D.出口参数:无
E.描述:打开文件,将用户的账号和密码从文件中读取出来,与从键盘输入的账号和密码判断是否一样,若一样就进入订餐管理系统,账号和密码输入三次都错误就退出系统,再关闭文件。
5 系统实现
5.1 系统构架(文件组织结构)
zym_main.c------------
主函数
zym_menu.c-----------
主菜单
zym_ entering.c-------
录入用户账号和密码
zym_ come.c-----------
订餐管理系统登陆
zym_ input.c-----------
订餐信息输入和插入
zym_ statistics.c-------
统计订餐中的套餐信息
zym_ scort.c-----------
排序订餐中的套餐销售信息
zym_ del.c-------------
订餐信息删除主菜单
zym_ del1.c-----------
按客户姓名删除
zym_ del1.c-----------
按客户电话号码删除
zym_find.c------------
订餐信息查询主菜单
zym_find1.c-----------
按客户姓名查询
zym_find2.c-----------
按客户电话号码查询
zym_ display.c--------
显示订餐信息
zym_ saveinformation.c-------
订餐信息保存
zym_ import.c---------
订餐信息读取
zym_ saveinformation2.c-----
用户账户和密码信息保存
zym_ import2.c---------
用户账户和密码信息读取
zym_inser.c--------------
插入订餐信息
5.2 源程序清单
(1)头文件
#include"stdio.h"
#include"string.h" //定义输入输出头文件
#include"stdlib.h" //定义清屏头文件
#include"conio.h"
#define N 100 //宏定义,客户订餐信息最大客户数量100
#define M 100 //宏定义,用户账号和密码最大用户数量100
int sum[10];
void input();
void del();
void del1();
void del2();
void entering();
void come();
void find();
void sort();
void display();
void insert();
void statistics();
void menu();
void find1();
void find2();
void saveinformation();
void saveinformation2();
void import();
void import2();
FILE *fp;
struct dingcan
{
char type[10];
int number;
};
struct date
{
int year;
int month;
int day;
};
struct information
{
char ID[20] ;
char name[20];
char Tel[30];
char Adress[32];
struct dingcan order1;
struct date time;
}str[N];
struct login
{
char ID[20] ;
char Password[32];
}member[M];
(2)主函数
#include"zym_task3.h"
void main()
{
char c;
printf("\n\n\n\n\t\t\t**************************************\n");
printf("\n\t\t\t 欢迎使用订餐管理系统\n\n");
printf("\t\t\t***************************************\n");
printf("\t\t\t 制作者:周尧明 2015年7月\n\n");
printf("\t\t\t按回车进入主菜单:\n");
getch();
system("cls");
entering();
come();
while(1)
{
menu();
scanf("%c",&c);
switch(c)
{
case '1': input();break;
case '2': find();break;
case '3': del();break;
case '4': scort();break;
case '5': statistics();break;
case '6': display();break;
case '0': exit(0);
}
}
}
(3)主菜单
#include"zym_task3.h"
void menu()
{
system("cls"); //清屏
printf("\n\n\n\t\t 欢迎使用管理系统\n\n\n");
printf("\t\t**********************************************\n\n");
printf("\t\t* 主菜单 *\n\n");
printf("\t\t**********************************************\n\n\n");
printf("\t 1 输入订餐信息 2 进入查询订餐选项\n");
printf("\t 3 进入订餐删除选项 4 订餐信息排序\n");
printf("\t 5 统计订餐信息 6 输出订餐信息 \n");
printf("\t 0 退出系统\n");
printf("\t 请选择[1//2/3/4/5/6/0]:");
}
(4)录入用户账号和密码
#include"zym_task3.h"
void entering()
{
int m,i=0,n;
printf("\n\n\n\t\t\t***********************************\n");
printf("\n\n\n\t\t\t********是否要从新录入账号*********\n");
printf("\n\n\n\t\t\t***********************************\n");
printf("\n\n\n\t\t\t继续请按1,结束请按0:");
scanf("%d",&n);
if(n==1)
do
{
printf("输入要录入用户的账号和密码:(****** *******)\n");
scanf("%s %s",member[i].ID ,member[i].Password);
i++;
printf("继续查询请按1,结束请按0:");
scanf("%d",&m);
}while(m);
saveinformation2();
system("cls");
}
(5)订餐管理系统登陆
#include"zym_task3.h"
void come()
{
int i=0,j,n,s;
char a[20],b[20];
import2();
printf("\n\n\n\t\t**********************************************\n");
printf("\n\n\n\t\t*******是否要登陆进入餐厅订餐管理系统********\n");
printf("\n\n\n\t\t**********************************************\n");
printf("\n\n\n\t\t\t继续请按1,结束请按0:");
scanf("%d",&n);
if(n==1)
{
system("cls");
printf("\n\n\n\t\t*****************************************\n");
printf("\n\n\n\t\t\t登陆餐厅订餐管理系统\n");
printf("\n\n\n\t\t*****************************************\n");
for(j=0;j<4;j++)
{
printf("\t\t\t输入账号:");
scanf("%s",a);
printf("\t\t\t输入密码:");
scanf("%s",b);
for(i=0,s=0;i=M&&j==0) printf("\t\t\t登录失败!\n");
if(i>=M&&j==1) printf("\t\t\t你已经错误二次,还有一次机会!\n");
if(i>=M&&j==3)
{ printf("\t\t\t你已经错误三次,退出系统!\n");exit(0);}
if(s==1) break;
}
}
else exit(0);
printf("\n按任意键返回主菜单:");
getch();
system("cls");
}
(6)订餐信息输入和插入
#include"zym_task3.h"
void input()
{
int i=0,m,n;
printf("第一次录入信息请按1,插入订餐信息请按2:");
scanf("%d",&n);
if(n==1)
{
do
{
printf("可选择套餐为:\n套餐一 套餐二 套餐三 套餐四 套餐五
套餐六 套餐七 套餐八 套餐九 套餐十\n");
printf("输入用户订餐类型:");
scanf("%s",str[i].order1.type);
printf("输入用户订此套餐数量:");
scanf("%d",&str[i].order1.number);
printf("输入用户编号:");
scanf("%s",str[i].ID);
printf("输入用户姓名:");
scanf("%s",str[i].name);
printf("输入用户电话:");
scanf("%s",str[i].Tel);
printf("输入用户地址:");
scanf("%s",str[i].Adress);
printf("输入用户订餐日期:\n年 月 日\n");
scanf("%d %d %d",&str[i].time.year,&str[i].time.month,&str[i].time.day);
i++;
printf("继续订餐请按1,结束请按0:");
scanf("%d",&m);
}while(m);
saveinformation();
}
if(n==2) insert();
printf("\n按任意键返回主菜单:");
getch();
}
(7)统计订餐中的套餐信息
#include"zym_task3.h"
void statistics()
{
int i,t=0,k;
import();
system("cls");
for(k=0;k<10;k++)
switch(k)
{
case 0: for(i=0,sum[k]=0;i
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名: 日 期:
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。
作者签名: 日期: 年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名: 日期: 年 月 日
导师签名: 日期: 年 月 日
注 意 事 项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
第 61 页 共 58 页