《杂志订阅管理系统----课程设计报告(共27页).doc》由会员分享,可在线阅读,更多相关《杂志订阅管理系统----课程设计报告(共27页).doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 测控技术与仪器 专业课程设计题单 班级 学号 姓名 课程名称 计算机课程设计 课 题 杂志订阅管理系统 设计要求 (1)分组后,每组抽取一个题目,每人完成该题目 的一个功能模块的设计; (2)锯齿型书写格式,菜单式界面 ; (3)必须上机调试通过; (4)每人单独完成一份完整的课程设计报告。 课 题 发 给 日 期 课程设计完成日期 指 导 教 师 评语: 计算机课程设计细则一、设计要求:1、分组后,每组抽取一个题目,每人完成该题目的一个功能模块的设计。2、模块化程序设计,锯齿型书写格式。3、输出要求: 1) 应用程序正常运行后,要在屏幕上显示一个文字菜单;2) 要
2、求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式等;3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。4、必须上机调试通过。二、设计报告格式:写设计报告(要求正规打印,A4幅面),内容包括:1、题目(封面)2、计算机课程设计细则3、前言,需求分析(鼓励设置目录)4、概要设计(程序设计组成框图、流程图)5、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)6、源程序清单和执行结果:清单中应有足够的注释7、用户使用说明8、调试与测试:调试方法,测试结果及采取的解决措施的分析与讨论。9、附录或参考
3、资料 三、检查要求:1、每个人必须有可运行的程序2、每个人必须单独完成一份完整的课程设计报告。(打印稿)四、打分标准:1、教师定期检查学生进度,学生不得以自己有私人电脑为借口而不来上机。2、根据程序运行结果;3、根据计算机课程设计报告,学生能正确并熟练地解释清楚教师对程序的提问。以上三项缺一不可,否则不能到得相应学分。杂志订阅管理系统设有一本杂志,该杂志最多拥有订户不超过10户,每个订户的信息包括:姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限(某年某月) ,设计一杂志订阅管理系统 ,系统以菜单方式工作,能提供以下功能:1、录入订户信息到文件由李琴波完成2、主界面及浏览所有订户信息
4、由周鑫完成3、查询功能(至少实现两种方式):如:按订户编号查询、按订阅期限查询等由李永健完成4、修改功能:修改订户信息 由程蔚濯完成5、删除功能:删除已到期的订户记录 由饶雅清完成6、统计功能:统计本期杂志订户数和订阅总量等由张佩利完成附一:时间安排表教学内容学时地点备注设计动员,布置任务0.5天1021118周周一上午查阅资料,分析、讨论与设计1天图书馆、1021118周周一下午至周二上午集体讨论0.5天1021118周周二下午编写程序,进行调试4天1021118周周三至19周周一完成模块联调,进行测试2天1021119周周二至周三成果验收,完成设计报告2天1021119周四至周五 本人完成
5、删除功能模块设计 杂志订阅管理系统课程设计目 录一、前言-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语言课程设计的主要
6、目的是为了了解和熟悉C语言的编程。学习C语言要经过一个“理论实践在理论在实践”的过程。而学习C语言课程设计就是要我们进行实践,从中发现问题,解决问题,提高我们运用C语言的能力。是我们能够运用C语言解决一些问题。通过不断的编程,熟能生巧,是我们的理论学习也有了实践基础,学习理论知识就较为容易一些,然后再通过实践不断的提高,如此良性循环就能是我们的C语言编程能力更上一成楼。开发一个杂志订阅系统对于那些热爱杂志的人来说无疑是一个很大的帮助,以后就可以足不出户在网络上随意订阅自己喜欢的杂志,而且杂志社还可以保留新老客户的订阅信息,也方便客户查询。C语言是一个,设计目标是提供一种能以简易的方式编译、处理
7、低阶内存、产生少量的以及不需要任何执行环境支援便能执行的编程语言。C语言也很适合搭配来使用。尽管C语言提供了许多低阶处理的功能,但仍然保持着良好的特性,以一个标准规格写出的C语言程式可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(或称MCU)以及等作业平台。1.1特色: C语言是一个有结构化程式设计、具有变量作用域(variable scope)以及递归功能的过程式语言。 传递参数是以值传递(Pass-by-value),也可以透过指针来传递参数(Pass-by-address)。 不同的变量类型可以用结构体(struct)组合在一起。 只有32个保留字(reserved keyword
8、s),使变量、函数命名有更多弹性。 部份的变量类型可以转换,例如整型和字符型变量。 透过指针(pointer),C语言可以容易的对内存进行低阶控制。 编译预处理(preprocessor)让C语言的编译更具有弹性。二、需求分析2.1系统目标本系统总体目标是运用该管理系统,对一期杂志的订阅用户信息进行统一,方便的管理。在设计该管理系统的过程中,应实现以下操作:1) 程序正常运行后,在屏幕上显示一个文字菜单;2)用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式等;3)应用程序运行后,先显示主菜单,用户可以根据菜单选择所需操作,继而完成相应的操作。4)具有较高的可靠性和可用性;5)
9、使用方便,直观且便于操作;6)系统易于管理维护。2.2、运行环境 一台能运行.exe可执行文件和读取txt文本文档的计算机或其他电子设备。2.3、用户特点 具备基础的计算机操作技能、了解简单的英语单词。2.4、功能需求1)录入订户信息到文件2)主界面及浏览所有订户信息3)查询功能(至少实现两种方式): 如:按订户编号查询、按订阅期限查询等4)修改功能:修改订户信息 5)删除功能:删除已到期的订户记录 6)统计功能:统计本期杂志订户数和订阅总量等三、概要设计程序框图杂志订阅管理系统按姓名查找订户信息按订户编号查找订户信息浏览所有订户信息添加新订户信息删除订户信息修改订户信息统计本期杂志订户数统计
10、本期杂志订阅总量退出 1. 主要的结构体为node,包括用户的基本信息:姓名,订户编号,性别,地址,电话号码,订阅数和订阅期限。全局变量为结构体变量typedef struct entry。主函数采用while循环语句,9个语句分别对应9个子函数,操作简单方便。2. 调用void insert()函数,增加新订户。打开文件,采用while语句判断用户数是否超过10个,若没有,采用for循环依次写入需添加的用户信息并保存,即完成添加用户功能。3. 调用int del()函数,删除到期订户记录。采用while语句依次检查文件中的到期用户,采用if判断语判断系统中是否存在到期用户,若存在,删除其用户
11、信息并保存。即完成删除操作。4. 调用int customerNum()和int orderNum()函数,统计杂志订阅用户数和订阅总量。主要采用while循环语句依次统计订户数和订阅总量并输出,即完成统计操作。5. 调用void modify()函数,修改订户信息。用While循环语句依次查找文件中需要修改的用户,用if语句判断所需修改用户是否存在并逐次修改其信息并保存,即实现修改功能。6. 调用void showlist()函数,浏览所有订户信息。在程序运行开始时键入“hello”时系统会显示一次当前订户信息,按3调用模块时,用指针P依次指向文件中信息,并依次输出信息。7. 调用int s
12、earchbyName()和int searchByid()函数,以姓名和订户编号查找用户信息。采用while循环语句依次查找系统中所存在的所有用户,采用if语句判断是否存在所查找用户并输出。8. 调用void tuichu()函数,退出并判断是否保存当前订户信息。在程序运行结束时,系统会自动根据用户需求做出相应的响应,即完成是否(y/n)保存操并退出系统。四、主界面流程图:开始提示验证信息(Hello)输入password,判断是否为Hello?根据i值调用相应功能模块函数结束五、删除订户信息流程图:开始进入主界面输入截止日期,判断是否存在到期用户删除该用户结束1.六、详细设计杂志订阅管理系
13、统该系统管理一期杂志,最多订户不超过10户,其订户信息包括:姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限(某年某月),此外,该系统以菜单方式工作,提供以下功能:1、录入订户信息到文件2、主界面及浏览所有订户信息3、查询功能(能够实现两种查询方式): 即按订户编号查询、按订户姓名查询等4、修改功能:修改订户信息 5、删除功能:删除已到期的订户记录 6、统计功能:统计本期杂志订户数和订阅总量。七、数据结构设计:在整个程序中采用了多种数据类型:整型int 整型 长整型long基本类型字符型 char空类型 viod 数据类型 构造类型 结构体类型( struct | )指针类型 ( T
14、 * )、数组、链表八、源程序清单8.1源代码:#include /*标准输入输出头文件*/#include /*申请动态内存头文件*/#include /*字符串头文件*/int flag=0; /*定义整型变量flag并赋值0*/typedef struct entry /*声明结构体*/ char id30; /*定义字符型数组*/ char gender; /*定义字符型变量*/char name20; /*定义字符型数组*/long tele; /*定义长整型变量*/int quantity; /*定义整型变量*/ char date20; /*定义字符型数组*/ char dueD
15、ate20; /*定义字符型数组*/ struct entry *next; /*定义指向entry结构体的指针*/node;node *head, *tail; /* 头指针,尾指针指向node中的结构体*/ void draw_service() /* service 菜单模块*/ printf(t*n); printf(t* *n); printf(t* Welcome to Magzine Customer Managment System *n); printf(t* *n); printf(t*n); printf(nnnn); printf(*n); /*输出*/printf(*
16、 please choose a service *n); printf(* *n); printf(* 1.-serach by name *n); printf(* 2.-serach by id *n); printf(* 3.-display *n); printf(* 4.-add new record *n); printf(* 5.-delete *n); printf(* 6.-modify *n); printf(* 7.-show customer number *n); printf(* 8.-show magzine quantity *n); printf(* 9.-
17、exit *n); printf(* *n); printf(*n);void read() int i; /*定义整型变量i*/node *p, *s, *pre; /*定义三个指向结构体的指针变量*/FILE *fp=NULL; /*将NULL赋给指向文件的指针*/if (fp = fopen(info.txt,r+) = NULL) /*以读写方式打开文件,打开失败返回NULL*/ printf(ERROR openning filen); /*输出信息*/ system(pause); /*系统暂停*/ return; p=head; s=head; /*将头指针的起始地址赋给指针变量
18、p,s*/i = 0;printf(Reading records from filen);while ( (fscanf(fp,%s %s %c %ld %d %s %s, /*将fp指定的文件按给定格式输入数据送到指定内存单元*/ p-id, p-name, &p-gender, &p-tele, &p-quantity ,p-date, p-dueDate) != EOF)printf(No.%dt id:%st name:%st gender:%ct telephone: %ldt quantity:%dt issueDate:%st dueDate:%snn, i,p-id, p-n
19、ame, p-gender, p-tele, p-quantity, p-date, p-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); /*释放内存*/p-next=NULL;tail = pre; fclose(fp); /*关闭文件*/ printf(File Reading Succeeded!n);system(pause); /*系统暂停*/in
20、t main()system(color 3f); /*设置背景色及字体色*/ char password20 = hello , inputpass20; /*定义一个字符型数组*/ int choice; head=(node *)malloc(sizeof(node); /*head为动作指针,申请内存空间,分配SIZE字节的内存区*/ while (1) /*当表达式为非0时,执行while语句中的内嵌语句 */ printf(t*n);printf(t* *n);printf(t* Welcome to Magzine Customer Managment System *n);pr
21、intf(t* *n);printf(t*n);printf(please input the Password(the password is hello)n);scanf(%s, inputpass); /*从键盘输入通行字*/ if (strcmp(password,inputpass) = 0) /*判断通行字是否正确*/break; else system(cls); /*清屏*/printf(nWrong Password please try againn); /*输出提示语句*/ read(); /*调用read函数*/int count = 0; /*定义一个整形变量coun
22、t,将0赋给这个变量 */while (1) /*当表达式为非0时,执行while语句中的内嵌语句 */system(cls); /*清屏*/ system(color 2f); /*设置背景色及字体色*/draw_service(); /*调用draw_service()模块*/scanf(%d, &choice); switch (choice) /*利用switch语句实现多分支选择结构*/ case 1: searchbyName(); break; /*实现按姓名查找操作*/ case 2: searchbyid(); break; /*按订户编号信息查找*/ case 3: sho
23、wlist();break; /*浏览所有订户信息 */ case 4: insert(); break; /*录入订户信息*/ case 5: del();break; /*删除订户信息*/ case 6: modify();break; /*修改订户信息*/ case 7: system(cls); count = customerNum(); /*清屏,将订户总数赋给count*/ printf(There are %d customers.n, count); /*输出count值*/ system(pause);break; /*系统暂停,按任意键继续*/ case 8: syste
24、m(cls); count = orderNum(); /*清屏,将订户数赋给count*/ printf(There are %d magzine ordered.n, count); /*输出count*/ system(pause);break; /*系统暂停,按任意键继续*/ case 9: writefile(); break; /*保存当前信息*/ case 10: exit();return 0; /*退出*/ return 0;8.2 删除模块源代码:int del() node *p, *q, *temp; /*定义指向node结构体指针*/ char key30; int
25、c; system(cls); showlist(); p = head; q = head; /* 将头指针head的起始地址赋给指针p ,q*/ printf(nplease input the date of duedaten); scanf(%s,key); while(p != NULL) /*当p不指向NULL时执行while中内嵌语句*/ if (!strcmp(key,p-dueDate) if (p = head) temp = head; head = p-next; /free(temp); else if (p = tail) temp = tail; q-next =
26、 NULL; tail = q; /free(temp); else q-next = p-next; /free(p); q = p; p = p-next; /*使p指向下一个结点*/ showlist(); flag-; system(pause); /*系统暂停,按任意键继续*/ return -1;九、用户使用说明用户运行程序后,需按要求从键盘输入通行字“hello”,验证通过后可浏览当前所有订户信息(姓名,订户编号,性别,电话号码,订阅数,订阅日期,订阅期限),按任意键,进入选择菜单,根据用户需求从键盘输入相应数字调用相应模块,实现订户所需服务。退出时,系统会自动输出提示语以判断是
27、否(y/n)需要保存添加,修改,或者删除后的用户信息并作出相应选择。完成用户需求后,按任意键退出即可。运行界面十、调试与测试10.1逻辑调试设计主界面时需要先判断当前文件中是否存有内容,有则直接进行各功能的选择和函数的调用,没有则先录入信息再进行各功能的选择和函数的调用。当函数调用完成后必须要进行保存。10.2语法调试在写好程序后,进行上机调试中有许多由于疏忽而造成的错误。1)定义变量类型错误,用户姓名应该定义为字节类型。2)当语句结束时,最后不能忽略分号。3)不同程序段调用相同函数的函数名要统一,对于不同函数要用到相同的数据时, 定义此数据的变量也要统一。4)当字符串进行比较是否相等时,不能
28、用“=”来进行比较,必须用strcmp来进行比较,strcmp是用于字符串比较的,而“=”是用于数据比较的。5) 清屏功能必须要写在函数段的输出前才有效,并且每个函数段都要用到清屏功能。6)主界面的设计当中也要进行对文件的输入、读取和保存的使用。7)在程序结束之前,要保存文件以免丢失文件。10.3测试结果经过反复的调试之后,对每一个错误和警告进行修改,对每一个函数的功能进行分析,对各模块之间的函数关系进行整理,逐个改正错误,使得调试成功!10.4 采取的解决措施的分析与讨论(1)在编写复杂的程序时要多利用函数,用一个函数来实现一个单独的功能。各函数之间除用参数传递数据外,尽量少出现耦合关系,便
29、于分别检查和处理。(2)编译时出现语法错误的信息,调试时根据提示信息找出程序中出错之处并进行逐一分析改正,直至无错误出现。(3)运行结果错误时,大多属于逻辑错误。我们采用以下办法:将程序与流程图仔细对照,如果流程图是正确的,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。果正确与否。实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf函数语句,输出有关变量的值,逐段往下检查。直到找到在某一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就能发现错误所在。也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不用再编译了,也不再被执行了)。这种方法可以不必一一去掉printf函数语句,以提高效率。十一、心得体会通过C语言为期10天的实习,我收获很多,从前学的东西只是为了应付考试,而今天才是把所学东西用到实际中去,编程让我对C语言有了进一步的认识与理解。从开始的一头雾水,到现在可以说已经初步掌握了编程的大致方法,虽然现在编写的只是一个很简单的应用程序
限制150内