杂志订阅管理系统【精选文档】_第1页
杂志订阅管理系统【精选文档】_第2页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、杂志订阅管理系统【精选文档】 C 语 言 课 程 设 计题 目:图书信息管理系统 设 计 者: 所属院系: 工程学院专 业: 安全工程班 级:055101学 号:指导教师:吴湘宁C语言课程设计报告 一题目要求杂志订阅管理软件要求使用计算机对一种杂志的订阅进行管理,该杂志拥有的最多订户不超过10人,每个订户的信息包括:姓名,性别,地址,电话号码,杂志单价,订阅数,订阅的期限(至XX年XX月)。现在要求用菜单选择并完成下述的功能:(1) 增加新订户,即将订户的全部信息输入到文件中;(2) 根据当天的日期对订户文件进行查询,删除已经到期的订户记录;(3) 统计本期杂志的订户数并打印运算结果;本期订户

2、信息表:订户名 订阅数 单价 金额李平 2 5.5 11。0黄海 1 5.5 5.5合计 3 1。0 16.5二.需求分析根据题目要求,由于杂志的订户信息要用文件存储,所以要提供文件的输入输出操作;提供文件的添加操作增加新订户;对订户文件的查阅,提供文件的查找操作;通过文件的删除操作删除已经到期的订户记录;提供统计和显示操作统计本期杂志订户数并打印运算结果;另外还要提供键盘式选择菜单以实现功能选择.三.总体设计 经过分析整个系统,根据上面的需求分析,可以将整个系统的设计分为如下三大模块:增加新订户,查询,统计。杂志订阅管理软件 查询统计增加四.详细设计1.主函数.主函数只提供输入,处理和输出部

3、分的函数调用.每个功能模块用菜单方式选择.设置一个menu()函数,再用主函数调用menu()函数,使系统执行完每部分功能模块后能够方便返回到系统界面。流程图显示一系列功能选项 输入n,判断n是否1-3 N 根据n值调用各功能模块 Y程序void main() FILE *fp; fp=fopen("record。txt",”w"); /*建立一个”record。txt"记事本/ fclose(fp);menu();void menu()int n,w; /*n表示菜单选择数字/do printf("tt - - - - - - - - - n

4、nn”); printf("tt 欢迎来到杂志订阅系统! nnn”); printf(”tt - - - - - n”); printf("nntt - - - - - nn”); printf(”tt 1:订户信息添加 n”); printf(”tt 2:订户信息浏览 n"); printf("tt 3:订户信息统计 n"); printf(”tt - - - - - nn”); printf("选择您的操作(13): bb”); scanf(”%d”,&n); if(n<1n>3) w=1; getchar()

5、; else w=0; While(w=1); /选择功能*/switch(n) case 1:add();break; /增加新订户记录/ case 2:search();break; /查找过期的订户记录并删除*/case3:statistic();break; /统计/case4:exit(); /退出/ 2.各功能模块设计 (1)增加新订户模块数据结构 单独看各个信息,姓名,性别和地址是字符型的,电话号码,订阅数和订阅期限是整型的,杂志单价是实数型的。数据信息以文件的形式存放,一条记录对应一个订户.由于信息有整型,实数型和字符型,所以应采用结构体数组来存放信息.如下:struct ma

6、gazinechar name6;char sex2;char addr13;char phone_number11;char unit_price5;char amount4;char time_limit8; 由于题目中明确订户最多不超过10人,所以这里定义reader10就够了.使用宏定义(#define N 2)方便改变每次要输入新订户的个数。流程图输入N个订户的信息将订户信息输入到record10 建立并打开文件record.txt将record10信息输入到reader.txtreader I<NY关闭文件N进入menu()【程序】void add()int t,i,m;t=

7、load_record();printf("您希望添加几组订户的信息?n”);printf("请输入数字: bbb");scanf("d",m);for(i=0;i<m;i+) printf(”n请输入第d组订户记录!n",i+1); input(t+i); /*调用输入函数/ save(t+m); /*调用保存函数,保t+m组数据/menu(); /返回登陆界面*/ void input(int i) printf(”请输入:n姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限n");scanf("%s

8、sss%ss%s",,orderi.sex,&orderi。addr,orderi.phone_number,orderi。unit_price,&orderi。amount,orderi。time_limit);(2)查询订户信息模块【需求分析】需要根据现在日期删除已经过期订户的信息。先设计一个deadline()函数用来输入各用户的截止日期.在query()函数中调用该函数与现在日期进行比较。【流程图】在deadline()函数中输入截止日期调用deadline(),并输入今天日期截止日期<今天日期保留信息N 用后面用户信息将其覆盖Y返

9、回menu()【程序】void search() FILE fp; char date11,str2; int t,i,sum=0; t=load_record(); printf(”请输入日期: bbbbbbbbb”); scanf(”%s”,date); printf("n");if(fp=fopen(”record。txt","w”)=NULL) /以只写方式打开/ printf(” 对不起,文件打不开! nn”); printf("n”);for(i=0;i<t;i+) if(strcmp(orderi.time_limit,da

10、te)<0) sum+; printf(”n"); printf_one(i); /*把符合条件的记录显示出来/ printf(”nn 此订户信息已过期!"); printf(”nn 您希望删除此条信息吗?(Y或N): bb"); scanf(”%s”,str); if(strcmp(str,"Y")=0|strcmp(str,"y”)=0) continue; fwrite(orderi,sizeof(struct magazine),1,fp); fclose(fp); if(sum=0) printf(” 对不起,找不到您

11、要的信息! nn"); printf(”nnn 任意键返回上一步 n"); getchar(); menu();(3)统计信息并输出【分析】在此另外建立一个新的结构体数组p【10】,将文件reader.Txt中的信息输入到数组中,读取一次count增加一,以统计订户总数。建立结构体数组p【10】【流程图】 i<N将文件reader.txt信息读取到p【10】中Count增加一YN输出p【10】信息 结束【程序】void statistic()int t;t=load_record();printf_n(t);printf("nnn 任意键返回 nn"

12、;);getchar();menu();void printf_one(int i) /显示一个仪器记录的函数/printf("%10s -5s %-10s -11s %-4s -3s 10snn", , orderi。sex, orderi。addr, orderi。phone_number, orderi。unit_price, orderi。amount, &orderi.time_limit);void printf_n(int n) /显示n个仪器记录的函数*/int j;printf("姓名 性别 地址 电话号码 杂志单价

13、 订阅数 订阅期限nn”);for(j=0;j<n;j+) if((j+1)%10=0) /控制显示,每屏显示10行*/ printf(”nn 任意键继续 ”); getchar(); puts(”nn"); printf_one(j); /调用显示一个仪器记录的函数/ 五,运行结果(1) 菜单的显示界面如下:(2) 输入1,进入增加新订户界面。输入信息并显示如下:(3) 输入2进入查询模块,输入日期可以删除已经过期订户信息,显示已过期订户信息如下:(4) 输入3,进入统计界面,删除过期用户显示订户及其信息如下:六,实习心得 由于我大一时学过VFP,所以心里总是觉得课程设计是件

14、很简单的事情,可是当我拿上题目时才发现事情并非我想的那样,虽然题目差不多可是做法却大相径庭,用C语言做程序需要很强的逻辑思维,只有有了清晰的思路才能做出好的程序.一开始拿上题目时并不知道从何下手,所以有了偷懒的念头,拿了以前人家编好的程序,可是运行时发现有很多问题,后来根据老师给的例题,自己又认真思考了一下午发现其实并没有自己想的那么难,后来通过自己的努力终于写出了一套完整的程序,虽然期间遇到许多困难,但在老师的细心讲解下都一一解决了。这次实习,我从中不仅学习到了关于C语言的知识,同时也感受到了自己成功编写出程序的喜悦.虽然这只是一个比较简单的程序,但是这是我通过自己学习到的知识完成的,期间也

15、有过犯错的念头,但是后来还是改正了.学习和练习C程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C语言需要不断的练习积累才能使我们的水平提高,虽然学习C语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序.这样才能提高我们的C语言设计的能力,更好的运用它解决一些问题.附录源代码include<stdio.h>#includestring.h#define max 10struct magazinechar name6;char sex2;c

16、har addr13;char phone_number11;char unit_price5;char amount4;char time_limit8;ordermax;void save(int n);int load_record();void search();void printf_n(int n);void printf_one(int i);void input(int i);void statistic();void add();void menu();/*添加模块*/void add()int t,i,m;t=load_record();printf("您希望添加

17、几组订户的信息?n");printf(”请输入数字: bbb”);scanf(”%d",&m);for(i=0;im;i+)printf(”n请输入第d组订户记录!n",i+1);input(t+i); /*调用输入函数/ save(t+m); /调用保存函数,保存t+m组数据*/menu(); /*返回登陆界面*/void input(int i) printf(”请输入:n姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限n");scanf("%s%s%ss%s%s%s”, , orderi.sex, &a

18、mp;orderi。addr, orderi。phone_number, orderi。unit_price, &orderi。amount, orderi.time_limit);/*查询模块/void search()FILE fp;char date11,str2;int t,i,sum=0;t=load_record();printf(”请输入日期: bbbbbbbbb”);scanf(”s",date);printf(”n");if(fp=fopen("record。txt”,”w")=NULL) /*以只写方式打开*/printf(&

19、quot;对不起,文件打不开!nn”); printf(”n”);for(i=0;i<t;i+)if(strcmp(orderi。time_limit,date)<0)sum+;printf("n");printf_one(i); /把符合条件的记录显示出来/printf("nn 此订户信息已过期!");printf(”nn 您希望删除此条信息吗?(Y或N): bb”);scanf("s",str);;if(strcmp(str,"Y”)=0|strcmp(str,"y”)=0)continue;fwr

20、ite(orderi,sizeof(struct magazine),1,fp); fclose(fp); if(sum=0) printf(”对不起,找不到您要的信息!nn”); printf(”nnn 任意键返回上一步 n”); getchar();menu();/*统计模块*/void statistic()int t;t=load_record();printf_n(t);printf("nnn 任意键返回 nn”);getchar();menu();void printf_one(int i) /显示一个仪器记录的函数*/printf(”-10s %-5s 10s %-11

21、s -4s %-3s %-10snn”, , orderi。sex, orderi。addr, orderi。phone_number, orderi。unit_price, orderi。amount, &orderi.time_limit);void printf_n(int n) /显示n个仪器记录的函数*/int j;printf("姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限nn");for(j=0;j<n;j+)if(j+1)%10=0) /*控制显示,每屏显示10行/printf("nn 任意键继续 ”)

22、;getchar();puts(”nn");printf_one(j); /*调用显示一个仪器记录的函数/ /*公共函数*/int load_record() /*加载仪器信息并计算记录仪器个数的函数*/FILE fp;int i; if((fp=fopen("record.txt",”r”))=NULL) /*以只读方式打开*/ printf(”n 文件无法打开 n”); for(i=0;!feof(fp);i+) /*从文件中读入数据并保存在结构体数组中/fread(&orderi,sizeof(struct magazine),1,fp);fclose(fp);return(i1);void save(int n) /*n表示保存n组数据,m表示保存在哪个文件夹里*/FILE *fp;int i;fp=fopen(”record。txt”,); /以只写方式打开/i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论