杂志订阅管理系统.docx

上传人:b****6 文档编号:7422141 上传时间:2023-05-11 格式:DOCX 页数:18 大小:323.94KB
下载 相关 举报
杂志订阅管理系统.docx_第1页
第1页 / 共18页
杂志订阅管理系统.docx_第2页
第2页 / 共18页
杂志订阅管理系统.docx_第3页
第3页 / 共18页
杂志订阅管理系统.docx_第4页
第4页 / 共18页
杂志订阅管理系统.docx_第5页
第5页 / 共18页
杂志订阅管理系统.docx_第6页
第6页 / 共18页
杂志订阅管理系统.docx_第7页
第7页 / 共18页
杂志订阅管理系统.docx_第8页
第8页 / 共18页
杂志订阅管理系统.docx_第9页
第9页 / 共18页
杂志订阅管理系统.docx_第10页
第10页 / 共18页
杂志订阅管理系统.docx_第11页
第11页 / 共18页
杂志订阅管理系统.docx_第12页
第12页 / 共18页
杂志订阅管理系统.docx_第13页
第13页 / 共18页
杂志订阅管理系统.docx_第14页
第14页 / 共18页
杂志订阅管理系统.docx_第15页
第15页 / 共18页
杂志订阅管理系统.docx_第16页
第16页 / 共18页
杂志订阅管理系统.docx_第17页
第17页 / 共18页
杂志订阅管理系统.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

杂志订阅管理系统.docx

《杂志订阅管理系统.docx》由会员分享,可在线阅读,更多相关《杂志订阅管理系统.docx(18页珍藏版)》请在冰点文库上搜索。

杂志订阅管理系统.docx

杂志订阅管理系统

C语言课程设计

题目:

图书信息管理系统

设计者:

所属院系:

工程学院

专业:

安全工程

班级:

055101

学号:

指导教师:

吴湘宁

C语言课程设计报告

一.题目要求

杂志订阅管理软件

[要求]

使用计算机对一种杂志的订阅进行管理,该杂志拥有的最多订户不超过10人,每个订户的信息包括:

姓名,性别,位置,电话号码,杂志单价,订阅数,订阅的期限(至XX年XX月).

现在要求用菜单选择并完成下述的功能:

(1)增加新订户,即将订户的全部信息输入到文件中;

(2)根据当天的日期对订户文件进行查询,删除已经到期的订户记录;

(3)统计本期杂志的订户数并打印运算结果;

本期订户信息表:

订户名订阅数单价金额

李平25.511.0

黄海15.55.5

合计31.016.5

二.需求分析

根据题目要求,由于杂志的订户信息要用文件存储,所以要提供文件的输入输出操作;提供文件的添加操作增加新订户;对订户文件的查阅,提供文件的查找操作;通过文件的删除操作删除已经到期的订户记录;提供统计和显示操作统计本期杂志订户数并打印运算结果;另外还要提供键盘式选择菜单以实现功能选择.

三.总体设计

经过分析整个系统,根据上面的需求分析,可以将整个系统的设计分为如下三大模块:

增加新订户,查询,统计.

 

四.详细设计

1.主函数.

主函数只提供输入,处理和输出部分的函数调用.每个功能模块用菜单方式选择.设置一个menu()函数,再用主函数调用menu()函数,使系统执行完每部分功能模块后能够方便返回到系统界面.

[流程图]

N

Y

[程序]

voidmain()

{

FILE*fp;

fp=fopen("record.txt","w");/*建立一个"record.txt"记事本*/

fclose(fp);

menu();

}

voidmenu()

{

intn,w;/*n表示菜单选择数字*/

do

{

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n\n");

printf("\t\t欢迎来到杂志订阅系统!

\n\n\n");

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n");

printf("\n\n\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n");

printf("\t\t1:

订户信息添加\n");

printf("\t\t2:

订户信息浏览\n");

printf("\t\t3:

订户信息统计\n");

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n");

printf("选择您的操作(1-3):

[]\b\b");

scanf("%d",&n);

if(n<1||n>3)

{

w=1;

getchar();

}

elsew=0;

}

While(w==1);/*选择功能*/

switch(n)

{

case1:

add();break;/*增加新订户记录*/

case2:

search();break;/*查找过期的订户记录并删除*/

case3:

statistic();break;/*统计*/

case4:

exit();/*退出*/

}

}

2.各功能模块设计

(1)增加新订户模块

[数据结构]

单独看各个信息,姓名,性别和位置是字符型的,电话号码,订阅数和订阅期限是整型的,杂志单价是实数型的.数据信息以文件的形式存放,一条记录对应一个订户.由于信息有整型,实数型和字符型,所以应采用结构体数组来存放信息.如下:

structmagazine

{

charname[6];

charsex[2];

charaddr[13];

charphone_number[11];

charunit_price[5];

charamount[4];

chartime_limit[8];

}

由于题目中明确订户最多不超过10人,所以这里定义reader[10]就够了.使用宏定义(#defineN2)方便改变每次要输入新订户的个数.

[流程图]

 

Y

N

 

【程序】

voidadd()

{

intt,i,m;

t=load_record();

printf("您希望添加几组订户的信息?

\n");

printf("请输入数字:

[]\b\b\b");

scanf("%d",&m);

for(i=0;i

{

printf("\n请输入第%d组订户记录!

\n",i+1);

input(t+i);/*调用输入函数*/

}

save(t+m);/*调用保存函数,保t+m组数据*/

menu();/*返回登陆界面*/

}

voidinput(inti)

{

printf("请输入:

\n姓名性别位置电话号码杂志单价订阅数订阅期限\n");

scanf("%s%s%s%s%s%s%s",&order[i].name,&order[i].sex,&order[i].addr,&order[i].phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);

}

(2)查询订户信息模块

【需求分析】需要根据现在日期删除已经过期订户的信息。

先设计一个deadline()函数用来输入各用户的截止日期。

在query()函数中调用该函数与现在日期进行比较。

【流程图】

 

N

Y

 

【程序】

voidsearch()

{

FILE*fp;

chardate[11],str[2];

intt,i,sum=0;

t=load_record();

printf("请输入日期:

[]\b\b\b\b\b\b\b\b\b");

scanf("%s",date);

printf("\n");

if((fp=fopen("record.txt","w"))==NULL)/*以只写方式打开*/

{

printf("对不起,文件打不开!

\n\n");

}

printf("\n");

for(i=0;i

{

if(strcmp(order[i].time_limit,date)<0)

{

sum++;

printf("\n");

printf_one(i);/*把符合条件的记录显示出来*/

printf("\n\n此订户信息已过期!

");

printf("\n\n您希望删除此条信息吗?

(‘Y’或‘N’):

[]\b\b");

scanf("%s",str);;

if(strcmp(str,"Y")==0||strcmp(str,"y")==0)

continue;

}

fwrite(&order[i],sizeof(structmagazine),1,fp);

}

fclose(fp);

if(sum==0)

{

printf("对不起,找不到您要的信息!

\n\n");

}

printf("\n\n\n任意键返回上一步…\n");

getchar();

menu();

}

(3)统计信息并输出

【分析】在此另外建立一个新的结构体数组p【10】,将文件reader.Txt中的信息输入到数组中,读取一次count增加一,以统计订户总数。

【流程图】

Y

N

 

【程序】

voidstatistic()

{

intt;

t=load_record();

printf_n(t);

printf("\n\n\n任意键返回…\n\n");

getchar();

menu();

}

voidprintf_one(inti)/*显示一个仪器记录的函数*/

{

printf("%-10s%-5s%-10s%-11s%-4s%-3s%-10s\n\n",order[i].name,

order[i].sex,order[i].addr,order[i].phone_number,order[i].unit_price,order[i].amount,&order[i].time_limit);

}

voidprintf_n(intn)/*显示n个仪器记录的函数*/

{

intj;

printf("姓名性别位置电话号码杂志单价订阅数订阅期限\n\n");

for(j=0;j

{

if((j+1)%10==0)/*控制显示,每屏显示10行*/

{

printf("\n\n任意键继续…");

getchar();

puts("\n\n");

}

printf_one(j);/*调用显示一个仪器记录的函数*/

}

}

五,运行结果

(1)菜单的显示界面如下:

(2)输入1,进入增加新订户界面。

输入信息并显示如下:

(3)输入2进入查询模块,输入日期可以删除已经过期订户信息,显示已过期订户信息如下:

(4)输入3,进入统计界面,删除过期用户显示订户及其信息如下:

六,实习心得

由于我大一时学过VFP,所以心里总是觉得课程设计是件很简单的事情,可是当我拿上题目时才发现事情并非我想的那样,虽然题目差不多可是做法却大相径庭,用C语言做程序需要很强的逻辑思维,只有有了清晰的思路才能做出好的程序。

一开始拿上题目时并不知道从何下手,所以有了偷懒的念头,拿了以前人家编好的程序,可是运行时发现有很多问题,后来根据老师给的例题,自己又认真思考了一下午发现其实并没有自己想的那么难,后来通过自己的努力终于写出了一套完整的程序,虽然期间遇到许多困难,但在老师的细心讲解下都一一解决了。

这次实习,我从中不仅学习到了关于C语言的知识,同时也感受到了自己成功编写出程序的喜悦。

虽然这只是一个比较简单的程序,但是这是我通过自己学习到的知识完成的,期间也有过犯错的念头,但是后来还是改正了。

学习和练习C程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C语言需要不断的练习积累才能使我们的水平提高,虽然学习C语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序。

这样才能提高我们的C语言设计的能力,更好的运用它解决一些问题。

附录

源代码

#include

#include

#definemax10

structmagazine

{

charname[6];

charsex[2];

charaddr[13];

charphone_number[11];

charunit_price[5];

charamount[4];

chartime_limit[8];

}

order[max];

voidsave(intn);

intload_record();

voidsearch();

voidprintf_n(intn);

voidprintf_one(inti);

voidinput(inti);

voidstatistic();

voidadd();

voidmenu();

/*添加模块*/

voidadd()

{

intt,i,m;

t=load_record();

printf("您希望添加几组订户的信息?

\n");

printf("请输入数字:

[]\b\b\b");

scanf("%d",&m);

for(i=0;i

{

printf("\n请输入第%d组订户记录!

\n",i+1);

input(t+i);/*调用输入函数*/

}

save(t+m);/*调用保存函数,保存t+m组数据*/

menu();/*返回登陆界面*/

}

voidinput(inti)

{

printf("请输入:

\n姓名性别位置电话号码杂志单价订阅数订阅期限\n");

scanf("%s%s%s%s%s%s%s",&order[i].name,&order[i].sex,&order[i].addr,&order[i].phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);

}

/*查询模块*/

voidsearch()

{

FILE*fp;

chardate[11],str[2];

intt,i,sum=0;

t=load_record();

printf("请输入日期:

[]\b\b\b\b\b\b\b\b\b");

scanf("%s",date);

printf("\n");

if((fp=fopen("record.txt","w"))==NULL)/*以只写方式打开*/

{

printf("对不起,文件打不开!

\n\n");

}

printf("\n");

for(i=0;i

{

if(strcmp(order[i].time_limit,date)<0)

{

sum++;

printf("\n");

printf_one(i);/*把符合条件的记录显示出来*/

printf("\n\n此订户信息已过期!

");

printf("\n\n您希望删除此条信息吗?

(‘Y’或‘N’):

[]\b\b");

scanf("%s",str);;

if(strcmp(str,"Y")==0||strcmp(str,"y")==0)

continue;

}

fwrite(&order[i],sizeof(structmagazine),1,fp);

}

fclose(fp);

if(sum==0)

{

printf("对不起,找不到您要的信息!

\n\n");

}

printf("\n\n\n任意键返回上一步…\n");

getchar();

menu();

}

/*统计模块*/

voidstatistic()

{

intt;

t=load_record();

printf_n(t);

printf("\n\n\n任意键返回…\n\n");

getchar();

menu();

}

voidprintf_one(inti)/*显示一个仪器记录的函数*/

{

printf("%-10s%-5s%-10s%-11s%-4s%-3s%-10s\n\n",order[i].name,order[i].sex,order[i].addr,order[i].phone_number,order[i].unit_price,order[i].amount,&order[i].time_limit);

}

voidprintf_n(intn)/*显示n个仪器记录的函数*/

{

intj;

printf("姓名性别位置电话号码杂志单价订阅数订阅期限\n\n");

for(j=0;j

{

if((j+1)%10==0)/*控制显示,每屏显示10行*/

{

printf("\n\n任意键继续…");

getchar();

puts("\n\n");

}

printf_one(j);/*调用显示一个仪器记录的函数*/

}

}

/*公共函数*/

intload_record()/*加载仪器信息并计算记录仪器个数的函数*/

{

FILE*fp;

inti;

if((fp=fopen("record.txt","r"))==NULL)/*以只读方式打开*/

{

printf("\n文件无法打开\n");

}

for(i=0;!

feof(fp);i++)/*从文件中读入数据并保存在结构体数组中*/

fread(&order[i],sizeof(structmagazine),1,fp);

fclose(fp);

return(i-1);

}

voidsave(intn)/*n表示保存n组数据,m表示保存在哪个文件夹里*/

{

FILE*fp;

inti;

fp=fopen("record.txt",);/*以只写方式打开*/

if(fp==NULL)

{

printf("\n文件无法打开\n");

}

for(i=0;i

{

fwrite(&order[i],sizeof(structmagazine),1,fp);

}

fclose(fp);

}

voidmain()

{

FILE*fp;

fp=fopen("record.txt","w");/*建立一个"record.txt"记事本*/

fclose(fp);

menu();

}

voidmenu()

{

intn,w;/*n表示菜单选择数字*/

do

{

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n\n");

printf("\t\t欢迎来到杂志订阅系统!

\n\n\n");

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n");

printf("\n\n\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n");

printf("\t\t1:

订户信息添加\n");

printf("\t\t2:

订户信息浏览\n");

printf("\t\t3:

订户信息统计\n");

printf("\t\t^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^\n\n");

printf("选择您的操作(1-3):

[]\b\b");

scanf("%d",&n);

if(n<1||n>3)

{

w=1;

getchar();

}

elsew=0;

}

while(w==1);/*选择功能*/

switch(n)

{

case1:

add();break;/*增加新订户记录*/

case2:

search();break;/*查找过期的订户记录并删除*/

case3:

statistic();break;/*统计*/

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2