您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言-杂志订阅管理软件
C语言程序设计-------------上机实习报告学院:资源学院班级:021094姓名:柴杉学号:20091001131指导老师:赵曼前言我们学习C语言课程设计的主要目的是为了了解和熟悉C语言的编程。学习C语言要经过一个“理论→实践→在理论→在实践”的过程。而学习C语言课程设计就是要我们进行实践,从中发现问题,解决问题,提高我们运用C语言的能力。是我们能够运用C语言解决一些问题。通过不断的编程,熟能生巧,是我们的理论学习也有了实践基础,学习理论知识就较为容易一些,然后再通过实践不断的提高,如此良性循环就能是我们的C语言编程能力更上一成楼。正文一、题目要求杂志订阅管理软件[要求]使用计算机对一种杂志的订阅进行管理,该杂志拥有的最多订户不超过10人,每个订户的信息包括:姓名,性别,地址,电话号码,杂志单价,订阅数,订阅的期限(至XX年XX月).现在要求用菜单选择并完成下述的功能:(1)增加新订户,即将订户的全部信息输入到文件中;(2)根据当天的日期对订户文件进行查询,删除已经到期的订户记录;(3)统计本期杂志的订户数并打印运算结果;本期订户信息表:订户名订阅数单价金额李平25.511.0黄海15.55.5合计31.016.5二、需求分析根据题目要求,由于订户信息放在文件中,所以应提供文件的输入,输出,删除等操作;在程序中需要浏览订户的信息,应提供显示、查找等操作;另外还应提供键盘式选择菜单实现功能等。三、总体设计根据上面的需求分析,可以将这个系统的设计分为四大模块:添加、查询、统计、退出。其中主要功能是添加、查询、统计三个模块。杂志订阅管理系统四、详细设计1、主函数主函数只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其流程图如图所示。NY【程序】voidmenu()/*主界面*/{intw,n;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/do{clrscr();printf(\n);printf(\t\t*************************\n);printf(\t\t\n);printf(\t\t\n);printf(\t\tWelcometothemagazineordersystem!^_^\n);printf(\t\t\n);printf(\t\t\n);添加查询统计退出开始显示一系列功能选项输入n,判断n是否是1~4?根据n的值调用各功能模块函数结束printf(\t\t*************************\n);printf(\n\n\t\t*********************************************\n\n);printf(\t\t1:add_new_subscriber\n);printf(\t\t2:browse\n);printf(\t\t3:statistic\n);printf(\t\t4:exit\n\n);printf(\t\t*********************************************\n\n);printf(Choiceyournumber(1-4):[]\b\b);scanf(%d,&n);if(n1||n4)/*对选择的数字作判断*/w=1;elsew=0;}while(w==1);/*选择功能*/switch(n){case1:add();break;/*增加新订户记录*/case2:search();break;/*查找过期的订户记录并删除*/case3:statistic();break;/*统计*/case4:exit();break;/*退出*/}}/*****************主函数*****************/main(){FILE*fp;fp=fopen(record.txt,w);/*建立一个record.txt记事本*/fclose(fp);menu();}2、各功能模块设计(1)添加模块【需求分析】该模块的功能是需要增加新的订户的记录,从键盘输入并逐条写到原来的文件中,添加模块流程图如图所示。【程序】/*******************添加模块*******************/voidadd(){intt,i,m;clrscr();t=load_record();printf(Howmanygroupsinformationdoyouwanttoadd?\n);printf(Enterthenumber:[]\b\b\b);scanf(%d,&m);/*输入要添加的记录个数*/for(i=0;im;i++){printf(\nInput%dthsubscriberrecord.\n,i+1);input(t+i);/*调用输入函数*/}save(t+m);/*调用保存函数保存t+m组数据*/clrscr();/**********清屏************/menu();/*返回登陆界面*/}voidinput(inti){printf(Pleaseinput:\nNamesexaddressphone_numberunit_priceamounttime_limit\n);scanf(%s%s%s%s%s%s%s,&order[i].name,&order[i].sex,&order[i].address,&order[i]开始调用加载函数t=load_record()输入要添加的新订户记录个数m调用输入函数input(t+i)调用保存函数save(t+m),保存t+m组数据结束.phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);}(2)查询模块【需求分析】该模块的功能是根据目前的日期对订户文件进行查询,删除已到期的订户记录。【程序】/*******************查询模块*******************/voidsearch(){FILE*fp;chardate[11],str[2];intt,i,sum=0;t=load_record();printf(Pleaseinputthecurrentdate:[]\b\b\b\b\b\b\b\b\b\b\b);scanf(%s,date);printf(\n);if((fp=fopen(record.txt,w))==NULL)/*以只写方式打开*/{printf(\nCannotopenfile\n);exit(0);}printf(\n);for(i=0;it;i++){if(strcmp(order[i].time_limit,date)0)开始输入当天日期比较当天日期和订阅期限的日期,把符合条件的记录显示出来删除到期订户记录结束{sum++;printf(\n);printf_one(i);/**********把符合条件的记录显示出来************************/printf(\n\nTherecordisoutofdate!);printf(\n\nDoyouwanttodeleteit'sinformation?('Y'or'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(Sorry!Cannotfindtheequipmentwhichyouwantto.\n\n);printf(***************************************************\n\n);}printf(\n\n\nPressanykeytogobacktheformerstep...\n);getchar();menu();}(3)统计模块【需求分析】该模块的功能是统计所有订户的资料并显示结果。【程序】/*******************统计模块*******************/voidstatistic(){intt;开始统计并显示订户资料结束t=load_record();printf(Theamountofsubscriberis[%d]\b\b\b,t);printf_n(t);printf(\n\n\nPressanykeytogoback...\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(Namesexaddressphone_numberpriceamounttime_limit\n\n);for(j=0;jn;j++){if((j+1)%10==0)/*控制显示,每屏显示10行*/{printf(\n\nPressanykeytocontinue...);getchar();puts(\n\n);}printf_one(j);/*调用显示一个仪器记录的函数*/}}3、公共函数/********************公共函数********************/intload_record()/***加载仪器信息并计算记录仪器个数的函数***/{FILE*fp;inti;if((fp=fopen(record.txt,r))==NULL)/*以只读方式打开*/{printf(\nCannotopenfile\n);exit(0);}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,w);/*以只写方式打开*/if(fp==NULL){printf(\nCannotopenfile\n);exit(0);}for(i=0;in;i++){fwrite(&order[i],sizeof(structmagazine),1,fp);}fclose(fp);}五、上机操作运行结果下面是各个模块的界面图:1、主菜单函数2、添加模块在主界面出现后输入1并按【enter】键,结果如图。输入要输入的记录数然后逐条增加,如图所示。3、查询模块4、统计模块六、总结在老师的带领下进行了C语言程序实践学习。在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。C语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏
本文标题:C语言-杂志订阅管理软件
链接地址:https://www.777doc.com/doc-6162951 .html