您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计报告—杂志订阅管理软件
C语言程序设计学院:工程学院班级序号:05507124学号:20071003303姓名:华进指导老师:刘文中前言我们学习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增加新订户模块被调函数2删除订户记录模块被调函数3统计订户信息并打印结果模块流程图1.增订新用户模块structmagazinemag;intn=0;voidinsert(structmagazinemag){FILE*fp;charch;if((fp=fopen(E:\\magazine,w))==NULL){printf(此文件不存在);exit(0);}do{开始显示一系列功能选择输入n,判断m是否是0到3?根据n值调用各功能模块函数结束N开始定义结构体全局变量,打开文件阅读资料,判断是否是超过10人结束输入新用户信息YNif(n10){printf(请输入姓名:);gets(mag.name);printf(请输入性别:);gets(mag.sex);printf(请输入地址:);gets(mag.address);printf(请输入电话号码:);gets(mag.tel);printf(请输入订阅期限:);gets(mag.dataline);printf(请输入杂志单价:);scanf(%f,&mag.price);printf(请输入订阅数:);scanf(%d,&mag.mount);fwrite(&mag,sizeof(structmagazine),1,fp);n++;}elseprintf(用户已满);printf(是否还有新订户?);scanf(%c,&ch);system(cls);}while(ch=='y'||ch=='Y');fclose(fp);}2.删除过期用户模块voiddel(){structmagazinemag;FILE*fp,*fp1;chardatatime[8];intm;if((fp=fopen(E:\\magazine,r))==NULL){printf(此文件不存在);exit(0);}printf(请输入当天日期:);gets(datatime);while(fread(&mag,sizeof(structmagazine),1,fp)==1){m=strcmp(datatime,mag.dataline);if(m1){开始输入当天日期判断是否过期输入用户信息N阅读信息Y结束if((fp1=fopen(E:\\magazine1,a))==NULL)/*将没有过期的用户写入新的文件中*/{printf(此文件不存在);exit(0);}fwrite(&mag,sizeof(structmagazine),1,fp1);fclose(fp1);}elsen--;}fclose(fp);}3.统计本期杂志订户信息模块voidtotal(){structmagazinemag;FILE*fp;floattotalprice;inttotalmount=0;floatprice1;floatsum=0.0;if((fp=fopen(E:\\magazine1,r))==NULL){printf(此文件不存在);exit(0);}printf(订户名\t订阅数\t单价\t金额\n);while(fread(&mag,sizeof(structmagazine),1,fp)==1){totalmount+=mag.mount;price1=mag.price;totalprice=mag.mount*mag.price;开始输入用户信息sum=0,i=0,判断i<nsum+=totalprice,i++结束输入sumNYsum+=totalprice;printf(%s\t%d\t%3.2f\t%3.2f\n,mag.name,mag.mount,mag.price,totalprice);}printf(合计\t%d\t%3.2f\t%3.2f\n,totalmount,price1,sum);fclose(fp);}运行结果:1.增加新订户2.擅长到期用户3.统计订户数用户姓名订阅数单价金额华进35.0315.09宋选25.0310.06李成龙55.0325.15合计105.0350.30运行与测试报告下面是个模块的的界面(一)主菜单(二)增加新订户模块(三)删除到期用户信息1.增加新订户2.删除到期用户3.统计订户数1.增加新订户2.删除到期用户3.统计订户数1请输入姓名:华进/*********后面继续输入用户其他信息***************/(三)删除到期用户(四)统计订户信息1增加新订户2.删除到期用户3.统计订户数2请输入当天日期:20090101是否继续其他操作?1.增加新定户2.删除到期用户3.统计订户数3订户名订户数单价金额华进35.0315.09宋选25.0310.06李成龙55.0325.15合计105.0350.30是否继续其他操作?后记课程设计过程中遇到的问题以及解决方法刚开始那到这个题目的时候,感到一片茫然,不知道如何下手。前面的C语言实习似乎还没让我找到感觉。结果就产生了一些错误的念头,便从网上搜索出来一些相关的程序,结果运行时出现了很多错误,漏洞百出。后来认识到这样做不对,不仅投机取巧,还对我的程序设计能力没有一点提高。但是还给了我许多提示。让我有了一定的思路了。在设计程序的过程中,用到被调函数,我经常将整体变量和局部变量混淆,以致在运行时无法满足要求。于是看前面的温故知新逐渐分清了一些概念才将这个问题解决。还有在写完程序后,出现了100多个错误,当时我看着就不想改了,后来才发现数字只是表面,通过不断的修改,错误变少的很快。课程设计的体会学习和练习C程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C语言需要不断的练习积累才能使我们的水平提高,虽然学习C语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序。这样才能提高我们的C语言设计的能力,更好的运用它解决一些问题。附录源程序:#includestdio.h#includestdlib.h#includestring.h#includeiostream.hstructmagazine{charname[20];charsex[4];charaddress[30];chartel[11];floatprice;intmount;chardataline[8];};structmagazinemag;intn=0;/*用户计数器*/voidinsert(structmagazinemag)/*增订新用户*/{FILE*fp;charch;if((fp=fopen(E:\\magazine,w))==NULL){printf(此文件不存在);exit(0);}do{if(n10){printf(请输入姓名:);gets(mag.name);printf(请输入性别:);gets(mag.sex);printf(请输入地址:);gets(mag.address);printf(请输入电话号码:);gets(mag.tel);printf(请输入订阅期限:);gets(mag.dataline);printf(请输入杂志单价:);scanf(%f,&mag.price);printf(请输入订阅数:);scanf(%d,&mag.mount);fwrite(&mag,sizeof(structmagazine),1,fp);n++;}elseprintf(用户已满);printf(是否还有新订户?);scanf(%c,&ch);system(cls);}while(ch=='y'||ch=='Y');fclose(fp);}voiddel()/*删除过期用户*/{structmagazinemag;FILE*fp,*fp1;chardatatime[8];intm;if((fp=fopen(E:\\magazine,r))==NULL){printf(此文件不存在);exit(0);}printf(请输入当天日期:);gets(datatime);while(fread(&mag,sizeof(structmagazine),1,fp)==1){m=strcmp(datatime,mag.dataline);if(m1){if((fp1=fopen(E:\\magazine1,a))==NULL)/*将没有过期的用户写入新的文件中*/{printf(此文件不存在);exit(0);}fwrite(&mag,sizeof(structmagazine),1,fp1);fclose(fp1);}elsen--;}fclose(fp);}voidtotal()/*统计本期杂志订户数*/{structmagazinemag;FILE*fp;floattotalprice;inttotalmount=0;floatprice1;floatsum=0.0;if((fp=fopen(E:\\magazine1,r))==NULL){printf(此文件不存在);exit(0);}printf(订户名\t订阅数\t单价\t金额\n);while(fread(&mag,sizeof(structmagazine),1,fp)==1){totalmo
本文标题:C语言程序设计报告—杂志订阅管理软件
链接地址:https://www.777doc.com/doc-5034914 .html