计算机基础与综合编程实验报告word文档_第1页
计算机基础与综合编程实验报告word文档_第2页
计算机基础与综合编程实验报告word文档_第3页
计算机基础与综合编程实验报告word文档_第4页
计算机基础与综合编程实验报告word文档_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学号 计算机基础与综合编程实验报告学 院 计算机科学与技术学院专 业 计算机类班 级姓 名指导教师日期 11 实验目的通过迭代式开发,深入掌握 C 语言的文件、链表、结构体、动态内存管理等技术,开发实现一个计费管理软件。2 系统功能与描述1.添加卡与查询卡的操作(1)添加卡信息。 介绍添加卡信息时,将添加的卡信息保存到工程目录下的 card.ams 文件。 输入a、输入菜单项编号 1 实现“添加卡”b、添加卡信息时输入的卡信息c、保存卡信息的文件路径 处理a、获取保存卡信息的文件路径。b、获取添加的卡信息。卡信息包括:卡号、密码、开卡金额、卡状态、开卡时间、截止时间、最后使用时间、使用次数、累积金额。c、将每个卡信息组装成一条字符串,一张卡的每个信息间用“#”分隔。d、将保存的卡信息的字符串写到工程目录下的 card.ams 文件末尾。 输出a、保存成功,则显示添加的卡信息。b、保存失败,则提示添加卡信息失败。(2)查询卡信息:2 介绍从工程目录下的 card.ams 文件中,读取并解析卡信息,将卡信息显示到界面中。 输入a、输入菜单项编号 2 实现“查询卡”b、card.ams 文件中的卡信息 处理a、获取保存卡信息的文件路径。b、逐行读取该文件中的卡信息并解析。c、将将解析结果保存到内存中,在界面上显示读取出来的卡信息。 输出a、读取失败,提示没有该卡的信息。b、读取成功,则在界面输出卡号,状态,余额,累计使用,使用次数,上次使用时间,一共六个信息。2.上机: 介绍根据用户输入的卡号和密码,判断该卡能否进行上机。更新可以上机卡的状态。 输入a、输入菜单项编号 3,实现“上机功能”b、输入卡号和密码c、链表和文件中添加过的卡信息 处理a、执行上机操作时,从卡信息文件中获取卡信息,添加到链表中。b、以卡号和密码为条件,遍历链表中的卡信息,找到与输入条件相符的卡信息。c、如果找到,以列表方式显示该卡的上机信息,并更新卡信息。如果未找到,3就提示用户。 输出a、如果找到需要上机的卡的信息,则以列表的方式显示。分为三列显示卡信息,依次为:卡号,余额,上机时间。b、如果未找到,则向界面输出“上机失败” ,提示用户3.下机:与上机类似,提示用户输入正确格式的下机的卡号及密码,若不存在此卡,则提示卡号不存在,若存在,则判断卡的状态,若为上机状态,更新下机信息,否则提示卡的状态及下机失败。同时把上下机的时间,和扣除消费金额的余额输出。4.项目拓展:I. 充值退费 介绍当用户选择“5 充值”时,提示用户输入需要充值的卡的卡号、密码和充值金额。充值完成后,以列表的方式显示该卡的充值信息,包括卡号、充值金额和余额;如果失败,则提示用户。 输入a、输入菜单项编号“5”或者“6”b、输入需要充值或退费的卡的卡号和密码c、保存卡信息的文件路径 data/card.ams,和保存在文件中的卡信息d、保存卡的充值和退费信息的文件路径 datamoney.ams4 处理a、读取卡信息文件中的卡信息,保存到链表中。b、以卡号和密码为条件,遍历链表,查询与该卡卡号和密码相同的卡信息c、如果找到,判断该卡是符合充值或退费的条件。d、若充值或退费,以列表的方式显示该卡的充值或退费信息e、若充值或退费失败,则提示用户。 输出a、若果充值或退费失败,则输出相应的提示信息b、若果充值或退费成功,则以列表的方式显示该卡的充值或退费信息II充值优惠在充值的基础上判断充值金额在哪个优惠范围,进行相应的优惠。III. 注销卡 介绍用户选择菜单项“8 注销卡”后,提示用户输入需要注销的卡的卡号和密码。以卡号为条件,遍历卡信息链表,查找符合条件的卡。如果找到,以列表的方式显示注销的信息;如果未找到,提示用户。注销的信息包括:卡号,退款金额 输入a、输入菜单项编号“8”b、输入需要注销的卡的卡号和密码c、保存卡信息的文件路径 data/card.amsd、保存在文件中的卡信息 处理a、读取卡信息文件中的卡信息,保存到链表中。5b、以卡号为条件,遍历链表,找到第一个与该卡卡号和密码相同的卡信息c、如果找到,判断该卡是否符合注销条件d、注销失败,则提示用户e、注销成功,以列表的方式显示该卡的注销信息 输出a、如果注销失败,则输出“注销卡失败!”提示用户b、如果注销成功,则分两列来显示注销信息:卡号和退款金额3 典型算法分析(完整源码请见光盘 )(1)搭建程序框架在主界面功能的基础上进行迭代开发。程序按照三层结构进行构建:表示层、逻辑层、存储层。然后通过分解与重组将程序分为几个模块,方便以后查看,修改,完善以及维护。#define _CRT_SECURE_NO_WARNINGS#include / 包含输入输出头文件#include / 包含时间头文件#include / 导入字符串处理函数#include / 包含动态内存分配头文件#include “model.h“ / 包含数据定义头文件#include “service.h“ / 包含业务处理头文件#include “global.h“ / 包含全局定义头文件#include “tool.h“ / 包含工具头文件 go on接下来是宏定义部分#ifndef MENU_H#define MENU_H6void outputMenu(); / 声明输出菜单函数void add(); / 声明添加卡函数void query(); / 声明查询卡函数void exitApp(); / 声明退出应用程序函数void logon(); / 声明上机函数void settle(); / 声明下机函数void annul(); / 声明注销卡函数void addMoney(); / 声明充值函数void refundMoney(); / 声明退费函数#endif通过使用宏定义,可以有效防止程序过于繁杂,也能够使同一个语句能够在多次使用时不需要重复编写,从而不影响整个程序的运行,减少了工作量,提高了效率。(2)文件的处理直接到卡文件中查找卡,通过循环读取卡,当卡的卡号正确时返回 1,否则返回 0int getCard()int nCount = 0; / 卡信息数int i = 0;Card* pCard = NULL; / 卡信息lpCardNode node = NULL; / 结点信息lpCardNode cur = NULL; / 添加到链表中的结点/ 清除链表中已经存在的数据if (cardList != NULL)releaseCardList();/ 初始化链表initCardList();/ 获取卡信息个数nCount = getCardCount(CARDPATH);if (nCount = 0)return FALSE;/ 动态分配内存保存卡信息pCard = (Card*)malloc(sizeof(Card)*nCount);if (pCard != NULL)7/ 如果返回FALSE,表示读取卡信息失败if (0 = readCard(pCard, CARDPATH)free(pCard);return FALSE;/ 将读取的卡信息,保存到链表中for (i = 0, node = cardList; i data = pCardi;cur-next = NULL;/ 将结点添加到链表尾部node-next = cur;node = cur;/ 释放内存free(pCard);return TRUE;return FALSE; (3)在卡信息链表中,查询卡号相同的卡信息Card* queryCards(const char* pName, int* pIndex)lpCardNode node = NULL;Card* pCard = NULL;/ 从文件中,获取卡信息8if (getCard() = FALSE)return NULL;/ 首先分配一个Card大小内存空间pCard = (Card*)malloc(sizeof(Card);if (pCard = NULL)return NULL;/ 从链表的头结点指向的下一个结点开始遍历node = cardList-next;/ 遍历链表,结点为空表示到达链表尾部while (node != NULL)/ 判断在遍历到的结点的学号中,查找是否包含pName字符串if (strstr(node-data.aName, pName) != NULL)/ 如果有,则保存结点中的数据pCard*pIndex = node-data;(*pIndex)+;/ 重新为指针分配内存pCard = (Card*)realloc(pCard, (*pIndex) + 1) * sizeof(Card);/ 移到链表的下一个结点node = node-next;return pCard;(4)更新卡信息文件中的一条卡信息int updateCard(const Card* pCard, const char* pPath, int nIndex)FILE* fp = NULL; / 文件指针int nLine = 0; / 文件卡信息数long lPosition = 0; / 文件位置标记Card bBuf;/ 以读写模式打开文件,如果失败,返回FALSE9if (fp = fopen(pPath, “rb+“) = NULL)return FALSE;/ 遍历文件while (!feof(fp) nLine+;/ 移到文件标识位置fseek(fp, lPosition, 0);fwrite(pCard, sizeof(Card), 1, fp);/ 关闭文件fclose(f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论