杂志订阅管理系统.docx
《杂志订阅管理系统.docx》由会员分享,可在线阅读,更多相关《杂志订阅管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
杂志订阅管理系统
00000000
C语言课程设计
设计(论文)题目:
杂志订阅管理系统
所在院:
信息工程学院
专业班级:
15计算机科学与技术0班
学生姓名:
张三
学号:
000000000
指导教师:
0000
2016年9月11日
000000
课程设计(论文)任务书
设计题目:
杂志订阅管理系统
专业班级:
15计算机科学与技术2班
学号000000000姓名00000
主要内容
设计学生成绩管理系统,主要包含:
输入记录模块、查询记录模块、更新记录模块、统计记录模块和输出记录模块。
采用字符用户界面,通过菜单选择相应的操作,直观且操作简单。
数据的存储选用数据文件方式;编辑平台选用MicrosoftVisualC++6.0。
所用到的知识点有:
三种基本程序结构,数组,函数,指针,结构体,文件操作和链表。
基本要求:
按照内容要求,设计完整的学生成绩管理系统。
要求调试通过,不存在漏洞,方便用户操作。
功能的实现上力求容错能力要强且提示信息完备。
完成期限:
2016年9月11日
指导教师签名:
杂志订阅管理系统
一、问题描述
杂志订阅用户的基本信息包括:
姓名、性别、地址、电话号码、杂志单价、订阅数、订阅的期限,设计一个杂志订阅系统对用户进行管理,其基本功能为:
(1)主函数提示用户选择功能:
输入、删除、浏览、查询
(2)数据添加模块
根据提示把新增订户信息写入订户信息数组中。
(3)数据输出
将所有用户的订阅信息输出。
(4)数据删除模块
采用基本的查找算法,查找订户信息文件,判断该条订户信息是否要删除并做出相应的操作。
(5)数据统计模块
对本期杂志订户数的统计,,输出订户名、订阅数、单价,并计算金额(单价*订阅数)。
可以定义变量统计订户数、订阅数和总金额,最后输出。
二、设计要求
1.界面清晰,美观大方。
2.要求使用菜单的形式描述功能项,菜单设计美观大方、实用,可仿照课程说明书模板或自行设计。
3.模块化程序设计:
要求在设计的过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。
4.程序以缩进格式书写,要求清晰、易懂。
5.各功能模块要求必须有准确描述函数功能的注释,重要语句最好也加上注释,以更好地让读者理解。
6.要求对2-3个重要功能模块进行描述。
7.课程设计题目选择要求一个班最多有两人可选择同一题目,但要求不得抄袭,最终每个人(即使题目相同)内容都是独立的。
8.课程设计至少包含5-10个功能模块,若题目中不够5-10个功能项,请自行设计功能项(5-10个功能项数目不同,得分也不同)。
9.可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用。
10.要求利用结构化程序设计方法以及C的编程思想来完成系统的设计。
11.编辑平台选用MicrosoftVisualC++6.0。
三、分析与实现
本程序采用模块化设计,主函数清晰、共有六个功能模块,每个功能模块以函数的形式表示,实现了杂志订阅管理的六项功能。
具体实现如下:
(1)首先声明必要的变量及数据结构。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
//符号常量定义
typedefstructmsg{
charname[20];
charsex[10];
chardialnumber[11];
intcount;
floatprice;
floatmoney;
chardate[20];
charreaderaddr[50];
}msgnode;
(2)显示帮助界面函数
以菜单显示帮助用户选择功能选项,输入0-5以选择相应的选项,将选项值传回主调函数。
voidStart(){
printf("\n");
printf("\n");
printf("欢迎来到杂志订阅系统!
\n");
printf("\n");
printf("\n");
printf("\n");
}
voidTextOut(){
printf("\t\t*----------订户信息检查-------------0.\n\n");
printf("\t\t*----------订户信息添加-------------1.\n\n");
printf("\t\t*----------订户信息更新-------------2.\n\n");
printf("\t\t*----------订户信息输出-------------3.\n\n");
printf("\t\t*----------订户信息统计-------------4.\n\n");
printf("\t\t*----------退出-------------5.\n\n");
}
intCheckDateMon(char*date){
charchdate[3];
chdate[0]=date[5];
chdate[1]=date[6];
chdate[2]='\0';
returnatoi(chdate);
}
intCheckDateDay(char*date){
charchdate[3];
chdate[0]=date[8];
chdate[1]=date[9];
chdate[2]='\0';
returnatoi(chdate);
}
(3)录入每个学生的信息
依次输入每个订阅者的信息,数据信息以文件的形式存放,一条记录对应一个订户,由于信息有整形和字符型,所以应采取结构体数组来存放信息。
intAddReader()
{
FILE*fp;
msgnodead;
if((fp=fopen("MSG.txt","at"))==NULL){
printf("无法打开文件或找不到文件请检查.\n");
getch();
return0;
}
printf("输入开始.^_^\n");
printf("请输入名字:
^_^\n");
scanf("%s",ad.name);
printf("请输入性别:
^_^\n");
scanf("%s",ad.sex);
printf("请输入电话号码:
^_^\n");
scanf("%s",ad.dialnumber);
printf("请输入数量:
^_^\n");
scanf("%d",&ad.count);
printf("请输入价格:
^_^\n");
scanf("%f",&ad.price);
printf("请输入日期:
^_^\n");
scanf("%s",ad.date);
while(ad.date[4]!
='.'||ad.date[7]!
='.'||strlen(ad.date)!
=10
||CheckDateMon(ad.date)>=13||CheckDateDay(ad.date)>=32)
{
printf("格式不正确或不存在日期.\n");
printf("你输入的日期格式'YYYY.MM.DD'\n");
printf("请你再次输入日期:
^_^\n");
scanf("%s",ad.date);
}
printf("请你输入读者地址:
^_^\n");
scanf("%s",ad.readeraddr);
fprintf(fp,"%15s%8s%13s%7d%7.2f%10.2f%13s%-50s\n"
ad.name,ad.sex,ad.dialnumber,ad.count,ad.price,ad.count*ad.price,ad.date,ad.readeraddr);
fclose(fp);
return1;
}
intUpdateMsg(char*currdate)
{
msgnodecurrnode,movenode;
inti=0,j=0;
FILE*fp;
if((fp=fopen("MSG.txt","rt+"))==NULL)
{
printf("%s\n","无法打开文件或找不到文件请检查.");
return0;
}
i=ftell(fp);
fscanf(fp,"%s%s%s%d%f%f%s%s"
currnode.name,currnode.sex,currnode.dialnumber
&currnode.count,&currnode.price,&currnode.money,currnode.date,currnode.readeraddr);
j=ftell(fp);
j=j-i;
rewind(fp);
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%d%f%f%s%s"
currnode.name,currnode.sex,currnode.dialnumber
&currnode.count,&currnode.price,&currnode.money,currnode.date,currnode.readeraddr);
if(feof(fp))
break;
if(strcmp(currdate,currnode.date)>0)
{
fseek(fp,-j,1);
fprintf(fp,"%15s%8s%13s%7d%7.2f%10.2f%13s%-50s"
"NULL","NULL","NULL",0
0.0,0.0,"9999.99.99","NULL");
fseek(fp,2L,1);
}
}
return1;
}
intOutputAll()
{
FILE*fp;
msgnodeoa;
intallcount=0;
floatallmoney=0;
if((fp=fopen("MSG.txt","rt"))==NULL){
printf("无法打开文件或找不到文件请检查.\n");
getch();
return0;
}
printf("%15s%8s%13s%7s%7s%10s%13s%-50s\n"
"姓名","性别","电话号码"
"数量","价格","总计","日期","地址");
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%d%f%f%s%s"
oa.name,oa.sex,oa.dialnumber,&oa.count
&oa.price,&oa.money,oa.date,oa.readeraddr);
(4)计算每个订户的消费
订户的信息储存在结构体数组中,外循环用来控制信息控制。
if(feof(fp))
break;
allcount+=oa.count;
allmoney+=oa.money;
if(strcmp(oa.sex,"NULL"))
printf("%15s%8s%13s%7d%7.2f%10.2f%13s%-50s\n"
oa.name,oa.sex,oa.dialnumber,oa.count,oa.price,oa.money,oa.date,oa.readeraddr);
}
printf("%15s%8s%13s%7d%7.2f%10.2f%13s%-50s\n"
"heji","--","-----------",allcount,"----",allmoney,"2007.09.04","----");
return1;
}
intCheckReader(char*name)
{
FILE*fp;
inti,j;
charch;
msgnodecr;
if((fp=fopen("MSG.txt","rt"))==NULL)
{
printf("无法打开文件或找不到文件请检查.");
getch();
return0;
}
i=ftell(fp);
fscanf(fp,"%s%s%s%d%f%f%s%s"
cr.name,cr.sex,cr.dialnumber,&cr.count,&cr.price,&cr.money,cr.date,cr.readeraddr);
j=ftell(fp);
rewind(fp);
j=j-i;
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%d%f%f%s%s",cr.name,cr.sex,cr.dialnumber,&cr.count,&cr.price,&cr.money,cr.date,cr.readeraddr);
i=ftell(fp);
if(!
strcmp(cr.name,name))
{
printf("您检查的读者在列表中.\n");
fseek(fp,-j,1);
fscanf(fp,"%s%s%s%d%f%f%s%s"
cr.name,cr.sex,cr.dialnumber,&cr.count
&cr.price,&cr.money,cr.date,cr.readeraddr);
if(feof(fp))
break;
printf("%15s%8s%13s%7d%7f%10f%13s%-50s\n"
cr.name,cr.sex,cr.dialnumber,cr.count
cr.price,cr.money,cr.date,cr.readeraddr);
return1;
}
}
}
intDisplayReader(char*date)
{
FILE*fp;
inti,j;
msgnodecr;
if((fp=fopen("MSG.txt","rt"))==NULL)
{
printf("无法打开文件或找不到文件请检查.");
getch();
return0;
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%d%f%f%s%s"
cr.name,cr.sex,cr.dialnumber,&cr.count,&cr.price,&cr.money,cr.date,cr.readeraddr);
if(feof(fp))
break;
if(!
strcmp("9999.99.99",cr.date))
continue;
if(strcmp(date,cr.date)<0)
{
printf("%15s%8s%13s%7d%7f%10f%13s%-50s\n"
cr.name,cr.sex,cr.dialnumber,cr.count
cr.price,cr.money,cr.date,cr.readeraddr);
}
}
return1;
}
(5)查询订户信息模块
需要根据现在日期删除已经过期订户的信息,先设计一个函数用来输入各用户的截止日期。
main()
{
charstr[30];
intch;
Start();
TextOut();
scanf("%d",&ch);
while(ch!
=5)
{
if(ch==0)
{
printf("请输入你想要的名称索引:
^_^\n");
scanf("%s",str);
if(CheckReader(str))
printf("你已经成功的索引了读者!
\n");
TextOut();
scanf("%d",&ch);
continue;
}
if(ch==1)
{
if(AddReader())
printf("你成功的添加了读者!
\n");
TextOut();
scanf("%d",&ch);
continue;
}
if(ch==2)
{
printf("请输入当前日期:
^_^\n");
scanf("%s",str);
if(UpdateMsg(str))
printf("你成功的更新了列表!
\n");
TextOut();
scanf("%d",&ch);
continue;
}
if(ch==3)
{
if(OutputAll())
printf("你成功的输出了列表!
\n");
TextOut();
scanf("%d",&ch);
continue;
}
if(ch==4){
printf("请输入你想显示的月份:
^_^\n");
scanf("%s",str);
if(DisplayReader(str))
printf("你这个月成功成为读者!
\n");
TextOut();
scanf("%d",&ch);
continue;
}
elsereturn;
}
}
四、运行与测试
2,增加订户模块
3.查询用户
4.删除过期用户
5.输出所有信息
6.统计本月订户
五、总结与思考
通过这次编程实践,巩固了C语言的知识,对C语言的内容有了深入的理解,尤其对系统的管理知识加深理解。
计算机语言只有通过不断的实践才能掌握和熟练运用,所以我们的课程设计非常有必要。
学习之后进行课程设计是对我们学习的检验,也是我们学习C语言的一种提升。
通过这次课程设计,我巩固了C语言的语法和一些函数,特别是对系统管理的函数,领悟了模块设计的基本思想。
课程设计是一个很好的提高我们专业编程水平的方法,让我们充分了解我们自己的水平,自主学习一些我们所短缺的知识。
主动督促我们去补充我们的知识漏洞。
这次实习,我从中不仅学习到了关于C语言的知识,同时也感受到了自己成功编写出程序的喜悦。
虽然这只是一个比较简单的程序,但是这是我通过自己学习到的知识完成的,期间也有过犯错的念头,但是后来还是改正了。
学习和练习C程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C语言需要不断的练习积累才能使我们的水平提高,虽然学习C语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序。
这样才能提高我们的C语言设计的能力,更好的运用它解决一些问题
附录:
杂志订阅管理系统
编程实现如下菜单驱动的学生成绩管理系统:
*----------订户信息检查-------------0.
*----------订户信息添加-------------1.
*----------订户信息更新-------------2.
*----------订户信息输出-------------3.
*----------订户信息统计-------------4.
*----------退出-------------5.
源代码
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
typedefstructmsg{
charname[20];
charsex[10];
chardialnumber[11];
intcount;
floatprice;
floatmoney;
chardate[20];
charreaderaddr[50];
}msgnode;
voidStart(){
printf("\n");
printf("\n");
printf("欢迎来到杂志订阅系统!
\n");
printf("\n");
printf("\n");
printf("\n");
}
voidTextOut(){
printf("\t\t*----------订户信息检查-------------0.\n\n");
printf("\t\t*----------订户信息添加-------------1.\n\n");
printf("\t\t*----------订户信息更新-------------2.\n\n");
printf("\t\t*----------订户信息输出-------------3.\n\n");
printf("\t\t*----------订户信息统计-------------4.\n\n");
printf("\t\t*----------退出-------------5.\n\n");
}
intCheckDateMon(char*date){
charchdate[3];
chdate[0]=date[5];
chdate[1]=date[6];
chdate[2]='\0';
returnatoi(chdate);
}
intCheckDateDay(char*date){
charchdate[3];
chdate[0]=date[8];
chdate[1]=date[9];
chdate[2]='\0';
returnatoi(chdate);
}
intAddReader(){
FILE*fp;
msgnodead;
if((fp=fopen("MSG.txt","at"))==NULL){
printf("无法打开文件或找不到文件请检查.\n");
getch();
return0;
}
printf("输入开始.^_^\n");
printf("请输入名字:
^_^\n");
scanf("%s",ad.name);
printf("请输入性别:
^_^\n");
scanf("%s",ad.sex