C语言程序设计报告—杂志订阅管理软件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C
语
言
程
序
设
计
学院:工程学院班级序号:05507124学号:303
**:**指导老师:***
前言
我们学习C语言课程设计的主要目的是为了了解和熟悉C语言的编程。
学习C语言要经过一个“理论→实践→在理论→在实践”的过程。
而学习C语言课程设计就是要我们进行实践,从中发现问题,解决问题,提高我们运用C语言的能力。
是我们能够运用C语言解决一些问题。
通过不断的编程,熟能生巧,是我们的理论学习也有了实践基础,学习理论知识就较为容易一些,然后再通过实践不断的提高,如此良性循环就能是我们的C语言编程能力更上一成楼。
正文
一.题目原文
杂志订阅管理软件
[要求]
使用计算机对一种杂志的订阅进行管理,该杂志拥有的最多用户不超过10人,每个订户信息包括:姓名,性别,地址,电话号码,杂志单价,订阅数,订阅期限(××年××月)。
现要求用菜单选择并完成下述功能。
(1)增加新订户,即将订户的全部信息输进到文件中。
(2)根据当天的日期对订户文件进行查询,删除以到期的订户记录。
(3)统计本期杂志订户数并打印运算结果。
二.题目的分析
本题主要是要求我编一个程序来管理订阅,包括增加和删除用户记录,统计运算结果。
增加用户就是在原有的文件中写入一个新的用户信息,但有一个前提就是用户数不能超过10人。
删除以到期的用户,就是从原有的文件中去掉一个用户信息,这里需要把日期与当天的日期进行比较,而统计结果就是把文件中的用户进行统计,并输出。
三.整体设计和板块划分
本程序总思路
本程序有一个主函数和三个被调函数,三个被调函数分别解决增加新订户,删除订户记录,统计订户信息打印运算结果三个问题。
板块划分:
1.主要的结构体为magzine,他包括用户的基本信息:姓名,性别,地址,电话号码,单价,
订阅数和期限。
全局变量为结构体变量mag。
主函数用的是switch语句,3个结果分别对应3个函数,便于操作。
2.被调函数1,解决增加新用户的问题。
先打开文件,要判断用户数是否超过10,然后将
新的用户信息写入文件中,这里用的是do……while语句对文价进行读和写,读文件需要计算出订户数,并判断。
写即是写入新订户。
3.被调函数2,解决删除订户记录的问题。
进行文件的读出操作,并输入当天的日期,用
strcmp语句与定户信息中的期限进行比较,如果订户信息中的期限与当日的期限相同,那么在写文件时,该订户的记录就不用写入了,反之,就应当写入。
这样变完成了删除操作了。
4. 被调函数3,统计用户信息并打印运算结果。
这里主要是进行文件的读和写,运用if
语句完成,统计结果即是根据单价和数量算出总价格并把所有的价格求和即可。
然后只需输出用户的姓名,订阅数,单价和金额
流程图
1.增订新用户模块
struct magazine mag; int n=0;
void insert(struct magazine mag) {
N
FILE *fp; char ch;
{
printf("此文件不存在");
exit(0);
} do {
if(n<10) {
printf("请输入姓名:");gets; printf("请输入性别:");gets; printf("请输入地址:");gets; printf("请输入电话号码:");gets; printf("请输入订阅期限:");gets;
printf("请输入杂志单价:");scanf("%f",&; printf("请输入订阅数:");scanf("%d",&;
fwrite(&mag,sizeof(struct magazine),1,fp); n++; }
else printf("用户已满"); printf("是否还有新订户?"); scanf("%c",&ch); system("cls");
}while(ch=='y'||ch=='Y'); fclose(fp);
}
2. 删除过期用户模块
void del() {
struct magazine mag; FILE *fp,*fp1; char datatime[8]; int m;
if((fp=fopen("E:\\magazine","r"))==NULL) {
printf("此文件不存在"); exit(0);
}
printf("请输入当天日期:");
gets(datatime);
{
m=strcmp(datatime,; if(m<1) {
if((fp1=fopen("E:\\magazine1","a"))==NULL)/*将没有过期的用户写入新的文件中*/ {
printf("此文件不存在"); exit(0); }
fwrite(&mag,sizeof(struct magazine),1,fp1); fclose(fp1); }
else n--; }
fclose(fp); }
3. 统计本期杂志订户信息模块
void total() {
struct magazine mag; FILE *fp;
float totalprice; int totalmount=0; float price1; float sum=;
if((fp=fopen("E:\\magazine1","r"))==NULL) {
printf("此文件不存在");
}
N
printf("订户名\t订阅数\t单价\t金额\n");
{
totalmount+=;
price1=;
totalprice=*;
sum+=totalprice;
printf("%s\t%d\t%\t%\n",,,,totalprice);
}
printf("合计\t%d\t%\t%\n",totalmount,price1,sum);
fclose(fp);
}
运行结果:
1.增加新订户
2.擅长到期用户
3.统计订户数
用户姓名订阅数单价金额
华进 3
宋选 2
李成龙 5
合计10
运行与测试报告
下面是个模块的的界面(一)主菜单
(二)增加新订户模块
(三)删除到期用户
(四)统计订户信息
后记
课程设计过程中遇到的问题以及解决方法
刚开始那到这个题目的时候,感到一片茫然,不知道如何下手。
前面的C语言实习似乎还没让我找到感觉。
结果就产生了一些错误的念头,便从网上搜索出来一些相关的程序,结果运行时出现了很多错误,漏洞百出。
后来认识到这样做不对,不仅投机取巧,还对我的程序设计能力没有一点提高。
但是还给了我许多提示。
让我有了一定的思路了。
在设计程序的过程中,用到被调函数,我经常将整体变量和局部变量混淆,以致在运行时无法满足要求。
于是看前面的温故知新逐渐分清了一些概念才将这个问题解决。
还有在写完程序后,出现了100多个错误,当时我看着就不想改了,后来才发现数字只是表面,通过不断的修改,错误变少的很快。
课程设计的体会
学习和练习C程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C语言需要不断的练习积累才能使我们的水平提高,虽然学习C语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序。
这样才能提高我们的C语言设计的能力,更好的运用它解决一些问题。
附录
源程序:
#include <>
#include <>
#include <>
#include <>
struct magazine{
char name[20];
char sex[4];
char address[30];
char tel[11];
float price;
int mount;
char dataline[8];
};
struct magazine mag;
int n=0;/*用户计数器*/
void insert(struct magazine mag)/*增订新用户*/ {
FILE *fp;
char ch;
if((fp=fopen("E:\\magazine","w"))==NULL)
{
printf("此文件不存在");
exit(0);
}
do
{
if(n<10)
{
printf("请输入姓名:");gets;
printf("请输入性别:");gets;
printf("请输入地址:");gets;
printf("请输入电话号码:");gets;
printf("请输入订阅期限:");gets;
printf("请输入杂志单价:");scanf("%f",&;
printf("请输入订阅数:");scanf("%d",&;
fwrite(&mag,sizeof(struct magazine),1,fp);
n++;
}
else printf("用户已满");
printf("是否还有新订户?");
scanf("%c",&ch);
system("cls");
}while(ch=='y'||ch=='Y');
fclose(fp);
}
void del()/*删除过期用户*/
{
struct magazine mag;
FILE *fp,*fp1;
char datatime[8];
int m;
if((fp=fopen("E:\\magazine","r"))==NULL)
{
printf("此文件不存在");
exit(0);
}
printf("请输入当天日期:");
gets(datatime);
while(fread(&mag,sizeof(struct magazine),1,fp)==1)
{
m=strcmp(datatime,;
if(m<1)
{
if((fp1=fopen("E:\\magazine1","a"))==NULL)/*将没有过期的用户写入新的文件中*/
{
printf("此文件不存在");
exit(0);
}
fwrite(&mag,sizeof(struct magazine),1,fp1);
fclose(fp1);
}
else n--;
}
fclose(fp);
}
void total()/*统计本期杂志订户数*/
{
struct magazine mag;
FILE *fp;
float totalprice;
int totalmount=0;
float price1;
float sum=;
if((fp=fopen("E:\\magazine1","r"))==NULL) {
printf("此文件不存在");
exit(0);
}
printf("订户名\t订阅数\t单价\t金额\n");
while(fread(&mag,sizeof(struct magazine),1,fp)==1) {
totalmount+=;
price1=;
totalprice=*;
sum+=totalprice;
printf("%s\t%d\t%\t%\n",,,,totalprice);
}
printf("合计\t%d\t%\t%\n",totalmount,price1,sum);
fclose(fp);
}
void main()
{
int ch;
char ch1;
do
{
printf("1.增加新订户\n");
printf("2.删除到期用户\n");
printf("3.统计订户数\n");
scanf("%d",&ch);getchar();
switch(ch)
{
case 1:insert(mag);break;
case 2:del();break;
case 3:total();break;
default:printf("输入有误!");break;
}
printf("是否继续其他操作?");
scanf("%c",&ch1);
system("cls");
}while(ch1=='y'||ch1=='Y');
}。