杂志订阅1 课程设计报告解析Word格式.docx
《杂志订阅1 课程设计报告解析Word格式.docx》由会员分享,可在线阅读,更多相关《杂志订阅1 课程设计报告解析Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
四、打分标准:
1、教师定期检查学生进度,学生不得以自己有私人电脑为借口而不来上机。
2、根据程序运行结果;
3、根据《计算机课程设计报告》,学生能正确并熟练地解释清楚教师对程序的提问。
以上三项缺一不可,否则不能到得相应学分。
杂志订阅管理系统
设有一本杂志,该杂志最多拥有订户不超过10户,每个订户的信息包括:
姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限(某年某月),设计一杂志订阅管理系统,系统以菜单方式工作,能提供以下功能:
1、录入订户信息到文件
―――由李琴波完成
2、主界面及浏览所有订户信息
―――由周鑫完成
3、查询功能(至少实现两种方式):
如:
按订户编号查询、按订阅期限查询等
―――由李永健完成
4、修改功能:
修改订户信息
―――由程蔚濯完成
5、删除功能:
删除已到期的订户记录
―――由饶雅清完成
6、统计功能:
统计本期杂志订户数和订阅总量等
―――由张佩利完成
附一:
时间安排表
教学内容
学时
地点
备注
设计动员,布置任务
0.5天
10211
18周周一上午
查阅资料,分析、讨论与设计
1天
图书馆、10211
18周周一下午至周二上午
集体讨论
18周周二下午
编写程序,进行调试
4天
18周周三至
19周周一
完成模块联调,进行测试
2天
19周周二至周三
成果验收,完成设计报告
19周四至周五
本人完成修改订户信息模块设计
杂志订阅管理系统课程设计
目录
一、前言-----------------------------------------------5
1.1特色----------------------------------------------5
二、需求分析-------------------------------------------6
2.1系统目标------------------------------------------6
2.2运行环境------------------------------------------6
2.3用户特点------------------------------------------6
2.4功能要求------------------------------------------6
三、概要设计-------------------------------------------7
四、主界面流程图---------------------------------------9
五、统计订户信息流程图--------------------------------10
六、详细设计------------------------------------------11
七、数据结构设计--------------------------------------11
八、源程序清单----------------------------------------12
8.1源代码-------------------------------------------12
8.2统计程序源代码------------------------------------16
九、用户使用说明--------------------------------------18
十、调试与测试----------------------------------------23
10.1逻辑调试-----------------------------------------23
10.2语法调试-----------------------------------------23
10.3测试结果-----------------------------------------23
10.4采取的解决措施的分析与讨论-------------------------23
十一、心得体会-----------------------------------------25
十二、参考文献-----------------------------------------26
一、前言
C语言是一个程序语言,设计目标是提供一种能以简易的方式编译、处理低阶内存、产生少量的机械码以及不需要任何执行环境支援便能执行的编程语言。
C语言也很适合搭配汇编语言来使用。
尽管C语言提供了许多低阶处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程式可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(微控制器或称MCU)以及超级电脑等作业平台。
1.1特色:
∙C语言是一个有结构化程式设计、具有变量作用域(variablescope)以及递归功能的过程式语言。
∙传递参数是以值传递(Pass-by-value),也可以透过指针来传递参数(Pass-by-address)。
∙不同的变量类型可以用结构体(struct)组合在一起。
∙只有32个保留字(reservedkeywords),使变量、函数命名有更多弹性。
∙部份的变量类型可以转换,例如整型和字符型变量。
∙透过指针(pointer),C语言可以容易的对内存进行低阶控制。
∙编译预处理(preprocessor)让C语言的编译更具有弹性。
二、需求分析
2.1系统目标
本系统总体目标是运用该管理系统,对一期杂志的订阅用户信息进行统一,方便的管理。
在设计该管理系统的过程中,应实现以下操作:
1)程序正常运行后,在屏幕上显示一个文字菜单;
2)用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式等;
3)应用程序运行后,先显示主菜单,用户可以根据菜单选择所需操作,继而完成相应的操作。
4)具有较高的可靠性和可用性;
5)使用方便,直观且便于操作;
6)系统易于管理维护。
2.2、运行环境
一台能运行.exe可执行文件和读取txt文本文档的计算机或其他电子设备。
2.3、用户特点
具备基础的计算机操作技能、了解简单的英语单词。
2.4、功能需求
1)录入订户信息到文件
2)主界面及浏览所有订户信息
3)查询功能(至少实现两种方式):
4)修改功能:
5)删除功能:
6)统计功能:
三、概要设计
程序框图
1.主要的结构体为node,包括用户的基本信息:
姓名,订户编号,性别,地址,电话号码,订阅数和订阅期限。
全局变量为结构体变量typedefstructentry。
主函数采用while循环语句,9个语句分别对应9个子函数,操作简单方便。
2.调用voidinsert()函数,增加新订户。
打开文件,采用while语句判断用户数是否超过10个,若没有,采用for循环依次写入需添加的用户信息并保存,即完成添加用户功能。
3.调用intdel()函数,删除到期订户记录。
采用while语句依次检查文件中的到期用户,采用if判断语判断系统中是否存在到期用户,若存在,删除其用户信息并保存。
即完成删除操作。
4.调用intcustomerNum()和intorderNum()函数,统计杂志订阅用户数和订阅总量。
主要采用while循环语句依次统计订户数和订阅总量并输出,即完成统计操作。
5.调用voidmodify()函数,修改订户信息。
用While循环语句依次查找文件中需要修改的用户,用if语句判断所需修改用户是否存在并逐次修改其信息并保存,即实现修改功能。
6.调用voidshowlist()函数,浏览所有订户信息。
在程序运行开始时键入“hello”时系统会显示一次当前订户信息,按3调用模块时,用指针P依次指向文件中信息,并依次输出信息。
7.调用intsearchbyName()和intsearchByid()函数,以姓名和订户编号查找用户信息。
采用while循环语句依次查找系统中所存在的所有用户,采用if语句判断是否存在所查找用户并输出。
8.调用voidtuichu()函数,退出并判断是否保存当前订户信息。
在程序运行结束时,系统会自动根据用户需求做出相应的响应,即完成是否(y/n)保存操并退出系统。
四、主界面流程图:
五、修改订户信息流程图:
六、详细设计
该系统管理一期杂志,最多订户不超过10户,其订户信息包括:
姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限(某年某月),此外,该系统以菜单方式工作,提供以下功能:
3、查询功能(能够实现两种查询方式):
即按订户编号查询、按订户姓名查询等
统计本期杂志订户数和订阅总量。
七、数据结构设计:
在整个程序中采用了多种数据类型:
整型int
整型
长整型long
基本类型
字符型char
空类型viod
数据类型
构造类型结构体类型(struct|……|)
指针类型(T*)、数组、链表
八、源程序清单
8.1源代码:
#include<
stdio.h>
/*标准输入输出头文件*/
stdlib.h>
/*申请动态内存头文件*/
string.h>
/*字符串头文件*/
intflag=0;
/*定义整型变量flag并赋值0*/
typedefstructentry/*声明结构体*/
{
charid[30];
/*定义字符型数组*/
chargender;
/*定义字符型变量*/
charname[20];
longtele;
/*定义长整型变量*/
intquantity;
/*定义整型变量*/
chardate[20];
chardueDate[20];
structentry*next;
/*定义指向entry结构体的指针*/
}node;
node*head,*tail;
/*头指针,尾指针指向node中的结构体*/
voiddraw_service()/*service菜单模块*/
{
printf("
\t**************************************************\n"
);
\t**\n"
\t*WelcometoMagzineCustomerManagmentSystem*\n"
\n\n\n\n"
***********************************************\n"
/*输出*/
printf("
*pleasechooseaservice*\n"
**\n"
*1.-------serachbyname*\n"
*2.-------serachbyid*\n"
*3.-------display*\n"
*4.-------addnewrecord*\n"
*5.-------delete*\n"
*6.-------modify*\n"
*7.-------showcustomernumber*\n"
*8.-------showmagzinequantity*\n"
*9.-------exit*\n"
**********************************************\n"
}
voidread()
inti;
/*定义整型变量i*/
node*p,*s,*pre;
/*定义三个指向结构体的指针变量*/
FILE*fp=NULL;
/*将NULL赋给指向文件的指针*/
if((fp=fopen("
info.txt"
"
r+"
))==NULL)/*以读写方式打开文件,打开失败返回NULL*/
{
ERRORopenningfile\n"
/*输出信息*/
system("
pause"
/*系统暂停*/
return;
}
p=head;
s=head;
/*将头指针的起始地址赋给指针变量p,s*/
i=0;
Readingrecordsfromfile\n"
while((fscanf(fp,"
%s%s%c%ld%d%s%s"
/*将fp指定的文件按给定格式输入数据送到指定内存单元*/
p->
id,p->
name,&
p->
gender,&
tele,
&
quantity,p->
date,p->
dueDate))!
=EOF)
printf("
No.%d\tid:
%s\tname:
%s\tgender:
%c\ttelephone:
%ld\tquantity:
%d\tissueDate:
%s\tdueDate:
%s\n\n"
i,p->
name,p->
gender,p->
tele,p->
quantity,
dueDate);
i++;
flag++;
if(i>
=10)
{
printf("
用户最多只能十个\n"
break;
}
s=(node*)malloc(sizeof(node));
/*分配字节存储区*/
pre=p;
p->
next=s;
p=s;
pre->
next=NULL;
free(s);
/*释放内存*/
next=NULL;
tail=pre;
fclose(fp);
/*关闭文件*/
FileReadingSucceeded!
\n"
intmain()
color3f"
/*设置背景色及字体色*/
charpassword[20]="
hello"
inputpass[20];
/*定义一个字符型数组*/
intchoice;
head=(node*)malloc(sizeof(node));
/*head为动作指针,申请内存空间,分配SIZE字节的内存区*/
while
(1)/*当表达式为非0时,执行while语句中的内嵌语句*/
\t*****************************************************\n"
pleaseinputthePassword(thepasswordishello)\n"
scanf("
%s"
inputpass);
/*从键盘输入通行字*/
if(strcmp(password,inputpass)==0)/*判断通行字是否正确*/
break;
else{
system("
cls"
/*清屏*/
\nWrongPasswordpleasetryagain\n"
/*输出提示语句*/
read();
/*调用read函数*/
intcount=0;
/*定义一个整形变量count,将0赋给这个变量*/
while
(1)/*当表达式为非0时,执行while语句中的内嵌语句*/
color2f"
draw_service();
/*调用draw_service()模块*/
scanf("
%d"
&
choice);
switch(choice)/*利用switch语句实现多分支选择结构*/
case1:
searchbyName();
break;
/*实现按姓名查找操作*/
case2:
searchbyid();
/*按订户编号信息查找*/
case3:
showlist();
break;
/*浏览所有订户信息*/
case4:
insert();
/*录入订户信息*/
case5:
del();
/*删除订户信息*/
case6:
modify();
/*修改订户信息*/
case7:
count=customerNum();
/*清屏,将订户总数赋给count*/
Thereare%dcustomers.\n"
count);
/*输出count值*/
/*系统暂停,按任意键继续*/
case8:
count=orderNum();
/*清屏,将订户数赋给count*/
Thereare%dmagzineordered.\n"
/*输出count*/
case9:
writefile();
/*保存当前信息*/
case10:
exit();
return0;
/*退出*/
return0;
8.2修改模块源代码:
voidmodify()
charkey[30];
Pleasinputtheidofthetuplethatyouwishtomodify:
key);
node*p;
p=head;
/*将头指针head的起始地址赋给指针p*/
while(p!
=NULL)/*判断文件是否为空*/
if(strcmp(key,p->
id)==0)
Tuplefound!
\npleaseinput\norderID:
\t"
p->
id);
\npleaseinput\nname:
name);
\npleaseinputgender:
%c"
gender);
\ntelephone:
%ld"
tele);
\npleaseinputquantity:
quantity);
\npleaseinputissuedate:
date);
\npleaseinputtheduedate:
\nUpdateSucceed!
p=p->
next;
/*使p指向下一个结点*/
TupleNotFound!
"
九、用户使用说明
用户运行程序后,需按要求从键盘输入通行字“hello”,验证通过后可浏览当前所有订户信息(姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限),按任意