C语言计费系统报告.docx
《C语言计费系统报告.docx》由会员分享,可在线阅读,更多相关《C语言计费系统报告.docx(15页珍藏版)》请在冰豆网上搜索。
![C语言计费系统报告.docx](https://file1.bdocx.com/fileroot1/2022-11/25/be7f8510-46e0-49ce-8817-6c1613c92ab9/be7f8510-46e0-49ce-8817-6c1613c92ab91.gif)
C语言计费系统报告
学号
12
《计算机基础与综合编程实验》报告
学院
计算机科学与技术学院
专业
计算机类
班级
m1502班
姓名
龙
指导教师
蕊
日期2016-4-25
1.实验目的-------------------------------------------------------1
2.系统功能描述-------------------------------------------------1
添加卡信息----------------------------------------------------1
查询卡信息----------------------------------------------------2
上机操作-------------------------------------------------------------2
下机操作--------------------------------------------------------------2
充值操作--------------------------------------------------------------3
退费操作--------------------------------------------------------------3
注销卡操作-----------------------------------------------------------4
3.典型算法分析-------------------------------------------------4
4.开发难点与体会-------------------------------------------------7
5.实验总结----------------------------------------------------------8
1实验目的
了解迭代式软件开发的一般过程,领会需求分析、系统设计、系统实现以及系统测试等阶段的任务要点;深入理解和熟练应用C/C++语言的基本概念和基本原理,如数据类型、顺序选择和循环结构程序设计、函数等;熟练理解和掌握C/C++语言的高级知识,如字符串、结构体、文件读写、动态存管理、链表等技术;熟练掌握在C/C++语言环境下,模块化开发的具体实现方法,深入领会和分析一些C/C++程序设计实用开发方法和技术;综合应用所学知识去分析需求,能够把所学的C/C++语言技术应用到具体的实践中去,并迭代式开发出一个软件系统,从而培养学生分析和解决问题的能力。
通过迭代式开发,深入掌握C语言的文件、链表、结构体、动态存管等技术,开发实现一个计费管理软件。
2系统功能与描述
实验流程:
1.添加卡与查询卡的操作
添加卡信息。
在数据结构的基础上进行迭代开发,添加一新卡,将卡信息保存到结构体变量中。
卡信息包括:
卡号、密码、开卡金额、卡状态、开卡时间、截止时间、最后使用时间、使用次数、累积金额。
在输入后程序自动显示本次添加的卡信息容。
查询卡信息:
:
精确查询,要求输入正确格式的卡号,若不存在输入的卡号则提示用户无此卡,若存在卡号,则输出此卡的信息。
若找到相对应符合条件的卡,则按照结构所存储的容输出卡信息。
:
模糊查询,要求输入卡号的关键字符串,若存在包含此关键字符串,则输出这些卡的信息。
不存在则提示用户。
2.上机:
提示用户输入正确格式的上机的卡号及密码,若不存在此卡,则提示用户卡号不存在,若存在,则判断卡的状态,若未上机状态则提示上机成功,更新上机信息,否则提示卡的状态以及上机失败。
同时程序更改卡的状态,记录下当前上机时间保存在链表中。
3.下机:
提示用户输入正确格式的下机的卡号及密码,若不存在此卡,则提示卡号不存在,若存在,则判断卡的状态,若上机状态则提示下机成功,更新下机信息,否则提示卡的状态及下机失败。
同时把上下机的时间,和扣除消费金额的余额输出。
4.充值:
提示用户输入正确格式的充值的卡号及密码和充值金额,若不存在此卡,则提示用户卡号不存在,若存在,则判断卡的状态,若已注销或失效则提示已注销或失效及充值失败,否则更新卡余额,提示用户充值成功,输出充值信息。
同时程序更改卡的余额,以原来的金额加上充值金额,保存在链表中。
6.退费:
提示用户输入正确格式的退费的卡号及密码和退费金额,若不存在此卡,则提示用户卡号不存在,若存在,则判断卡的状态,若已注销或失效则提示已注销或失效及退费失败,否则判断卡余额,若余额大于退费金额,则更新卡余额,提示用户退费成功,否则提示用户余额不足。
7.注销卡信息:
提示用户输入正确的要注销的卡号以及密码,若不存在此卡,则提示用户卡号不存在,若存在,则判断卡的状态,并提示用户注销成功。
8.自己添加的部分特色功能:
(1)按使用次数排序
(2)充值送费
3典型算法分析(完整源代码请见光盘)
(1)搭建程序框架在主界面功能的基础上进行迭代开发。
程序按照三层结构进行构建:
表示层、逻辑层、存储层。
编写相应预处理指令:
文件包含、条件编译以及宏定义。
#include
#include
#include"menu.h"
#include"data.h"
#include"card_file.h"
#define_CRT_SECURE_NO_WARNING
intmain(void)
{
intnum_selection=-1;
printf("您好,欢迎进入计费管理系统\n");
printf("\n");
goon>>
然后通过分解与重组,将程序分为几个模块,方便以后查看,修改,完善以及维
接下来是宏定义部分
#ifndefMENU_H
#defineMENU_H
voidoutputMenu();
voidadd();//添加卡操作
voidquery();//查询卡操作
voidlogon();//上机操作
voidlogoff();//下机操作
voidaddMoney();//充值操作
voidrefundMoney();//退费操作
//voidqueryStatistics();//查询统计操作
voidannul();//注销卡操作
voidexitApp();//退出
通过使用宏定义,可以有效防止程序过于繁杂,也能够使同一个语句能够在多次使用时不需要重复编写,从而不影响整个程序的运行,减少了工作量,提高了效率。
(2)文件的处理
直接到卡文件中查找卡,通过循环读取卡,当卡的卡号正确时返回1,否则返回0
tips:
fseek(fp,sizeof(Card)-sizeof(aName),1);//将位置指针移到下一个结构
代码部分:
intisExist(constchar*pName,constchar*pPath)
{
FILE*fp=NULL;
charaName[18]={0};//保存读取的卡号信息
if((fp=fopen(pPath,"rb"))==NULL)
{
printf("ThefunctionofisExsitcan'topenfile!
\n");
exit(-1);
}
while(!
feof(fp))
{
if(fread(aName,sizeof(aName),1,fp)==1)
{
if(strcmp(aName,pName)==0)
{
fclose(fp);
return1;
}
else
{
fseek(fp,sizeof(Card)-sizeof(aName),1);//将位置指针移到下一个结构体
}
}
}
fclose(fp);
return0;
}
关闭文件用fclose函数,可以使文件指针变量不再指向该文件,及时关闭文件,可以防止误操作
(3)创建链表用来添加,查询卡信息,将链表中的数据保存到文件中
部分代码:
intaddCard(Cardcard)//复制新添加的卡信息到链表
{
lpCardNodecur=NULL;
if(cardList==NULL)
{
initCardList();
}
//将卡信息添加到当前位置
cur=(lpCardNode)malloc(sizeof(CardNode));
if(cur!
=NULL)
{
cur->data=card;
cur->next=NULL;
while(cardList->next!
=NULL)//提高循环在链表找到最后一个结点
{
cardList=cardList->next;
}
cardList->next=cur;
returnTRUE;
}
returnFALSE;
}
一:
从文件中读取信息
(1)用一个指针p指向链表的头结点
(2)判断读取是否有错误,如果没有执行下一步,否则提示错误
(3)while(!
feof(fp))
(4)判断需要的值,如果是则执行4,如果不是则执行5
(5)再次判断是否读出,如果满足则输出或者返回,如果不满足则提示用户
(6)p指向下一个节点
(7)关闭文件
第二:
更新文件中的信息
(1)创建文件指针,
(2)while(!
feof(fp))
(3)判断fread(&card,sizeof(Card),1,fp)是否为空,如果是,获取文件位置,如果不是,继续循环。
(4)指针移到标记的位置
(5)更新卡中的信息
(6)输出更新的信息
(7)关闭文件
第三:
将数据保存到文件中去
(1)创建文件指针
(2)判断文件打开是否有错误,如果有,提示用户,如果没有,则执行下一步
(3)每一一个card的长度的向文件中输入数据。
(4)关闭文件
(5)结束
第四:
获取当地的时间(虽然不是很难但是用的很多很典型)
(1)用某某等于time(NULL)来获取当地的时间
(2)编写tinetostring函数将time的类型转化为%Y-%m-%d%H:
%M的类型
(3)以字符串的类型输出
4开发难点与体会
刚开始的时候自己连VS2010都不会用,以前一直用的是DEVC++,然后边开始在XX上面不断搜索怎样使用VS2010,慢慢地终于知道并开始熟悉VS2010的环境,也知道了如何创建文件,以前都只是写点小程序,还没写过这么大的程序,开始挺高兴的,但是当真正去做的时候,却茫然不知所措,不断地看书与实践。
这次实验比上学期难的多,并且要求各个方面知识都要学好,但是上学期没有认真听讲,导致落下很多,所以只能一点点去充实自己。
第一次实验并不是特别难,但是不知道怎么创建文件,最后在软酷上看学习资料慢慢会了。
添加卡和查询卡要用文件和数组知识。
但是自己这方面并没有掌握的很好。
所以只能一边写,遇到不会的再问老师和同学,就这样最终还是成功了。
然后是对链表的单独操作,链表是我最头痛的地方,关键是一点都不会,然后又把上学期的书翻出来好好地补习了一下。
最后还是完成任务了。
到后来越来越难,但是有了前面的铺垫,自己慢慢地得心应手,所以遇到困难也不怕,能够一一克服,通过我们的导师蕊老师和寝室的大神飞翔,好多问题都得到了解决。
通过这次实验,我学习到了如何将卡信息保存到文本文件,如何读取文件,掌握了FILE类型结构体,并且知道了如何打开文件以及读取数据以及关闭文件,等等好多以前不知道的知识。
有一下一些难点:
链表的形式:
插入操作:
在链表中查找节点:
我们这次计费管理系统分三步.
一是对要写成的计费管理系统做全面的分析,即对计费管理系统要使用的编写方法,管理功用,运行方式进行分析,并作出明确的解决方案.
针对这次的计费管理系统,它的流程是:
以管理员和用户方式进入,要有密码认证.实现添加、查询、上机、下机、充值、退费、查询统计、注销等功能。
二是程序的编写.由于计费管理系统的功能十分強大,程序的编写也十分的复杂,所以我们花了两个多月,每个星期完成一部分程序.程序的编写是一项困难的任务,完成此程序必需运用书中的大部分知识,而且要有清晰的思路,有较強的语言组织能力.由于每个星期完成一部分,所以程序能衔接得十分完整,所以每个星期编写程序的基础上考虑以前的程序结构.编写程序就是一项十分困难的事,所以一定要细心,不能有一丝的马虎,否则会前功尽弃.
三是程序的检查和系统的调用.程序写完后并不能保证它一定能运行,所以要对它进行调试,发现其中的弊端,并作出相应的修改,以完善程序,使其逻辑性,运算能力都符合题目要求,使计费管理系统的运行能力达到课程的目的。
5实验总结
实验框架:
本次实验难度较大,需要考察学生的多方面能力:
对基础编程知识的掌握,在开始阶段,大部分的代码都是利用我们的已有知识进行实验,通过实验让我们对知识的掌握更加熟练
对整个系统的功能以及实现的认识,在后期的实验中,我们不断的向初始工程中添加代码,这时由于工程变大,我们就需要了解到整个工程的各个部分,以便我们的工程能够有效快速的进行。
对新知识的吸收能力。
在工程进行的过程中,我们将会遇到许多我们现有知识无法解决的问题,这就需要我们通过各种方法来解决,如上网查阅资料,向老师提问等。
对实验中发现的问题要有耐心去解决它,只有通过一次又一次的错误,并从中吸取经验,我们才能让自己做的更好。
这次实验让我们知道了如何使用函数,链表和文件的操作。
也让我们对我们所学的有了更加一步的了解,也终于有了学以致用的感觉,虽然自己写的程序并不完美无瑕,可以说丑陋无比,但是我相信以后会越来越优化与美好。
更加重要的是我们知道了什么叫迭代,它对于我们来说不再难以理解,而是深入我们的心。
但是我觉得这次实验也有许多与实际生活不符的地方,如输密码的时候不能隐藏,可能会造成信息的泄露。
经过两个多月的课程实训,完成了对计费管理系统代码的设计,收获颇多。
也明白了自己在C语言上存在的一些问题,尤其在用C语言编程方面存在的缺点与不足。
经过课程实训使我明白做一个完整的系统要用到我们学到的很多方面的知识,一个完整的系统包含的C语言知识很多,要有好强的综合运用能力才能开发一个完整的系统。
在程序操作过程中要有耐心,更要细心。
同时,也体会到学软件专业要有好强的动手能力,而实训操作完成小系统锻炼了我的动手能力,今后,在动手操作方面要加强,毕竟熟能生巧,练多了才能提高自己的编写程序的能力。
毕竟,对于软件专业的初学者来说,起初的编程还属于经验编程,靠自己的学习及动手操作获得经验,以便为今后开发出新的程序打下基础。
通过这次实验,学到了很多,也坚定了我学习计算机的决心,我相信以后会越做越好的。
通过这次课程设计,我把书本的理论和实践联系起来,有利于巩固所学理我感觉收益匪浅,同时也为我以后走向工作岗位打下一个初步的基础。
尽管时间有限,我们做的设计不是很完善,但是仍然给了我很多启示。
在这次课程设计中,我觉得组员之间的合作很重要,组员之间的沟通能够给我带来很多帮助,我自己的想法是很多局限性,通过讨论可以完善我的设计,也让我的书本上的理论有了新的理解。
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体容,但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。
这次实训是老师给了例程序,经过自己的改写,实现要求。
先做简单的输出,一步步的再做其它复制部分,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。
在具体操作中对上学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。
发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。
通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
深刻体会到“没有做不到的,只有想不到的”,“团结就是力量”,“实践是检验真理的标准”,“不耻下问”……的寓意。
计时在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力,提高实际操作水平。
《计算机基础与综合编程实验》成绩评定表
班级:
m1502 :
龙 学号:
12
序号
评分项目
满分
实得
1
学习态度认真、遵守纪律
10
2
迭代开发进度合理,提交结果正确
40
3
代码规、注释清晰、可读性好
10
4
软件功能完善、运行正确
20
5
验收情况良好
10
6
报告规、描述清晰准确
10
总得分
评语:
指导教师签名:
2016年4月29日