C语言课程设计报告 购物卡管理系统
更新时间:2023-05-14 01:36:01 阅读量: 实用文档 文档下载
- c语言课程设计报告推荐度:
- 相关推荐
C 语 言 课 程 实 习 报 告
课程设计第17题
(一)题目要求
请设计《购物卡管理系统》,要实现系统的主要功能模块有: (1)实现系统内制卡、发卡功能;
(2)实现系统内卡账户和相关账户管理; (3)实现卡交易和合法性检查; (4)实现卡金融交易积分功能; (5)实现卡报表功能;
(6)数据以文件形式存储。 [提示]
制卡:指申请一个购物卡,但还没有使用。 发卡;指该卡以经起用。
实现卡交易:指从卡中消费掉一定金额。 (二)题目及要求的分析:
根据题目要求,系统应该实现以下功能:
(1) 制卡:主要是新建出一张购物卡,并输入了顾客部分信息,如姓名、密码等,但卡没有激活,依然不可使用。
(2) 发卡:激活新建的购物卡,用户能够使用卡进行各项活动。
(3) 消费:进入账户后,取走少于账户金额的钱款进行消费,并在账户减少相应的金额,增加相应的积分。
(4) 存款:进入账户后,在金额项加上用户要存入的钱款。 (5) 报表:显示顾客购物卡上记录的所有信息,除密码外。
(6) 存储:购物卡内的信息以文件形式存储。 (7) 退出:从系统中退出。
(8) 菜单:提供良好的界面,方便用户的操作。
(三)整体设计与模块划分:
根据以上的分析,可以将系统整体划分为以下大致几部分:
函数及结构模块有: 1、数据结构结构体:
struct card /*定义购物卡的几要素*/ {
char name[20]; /*顾客姓名(即卡号)*/ long int password; /*购物卡密码*/ char start[4]; /*购物卡是否激活*/ float account; /*余额*/ float score; /*积分*/ } card[100];
2、main() /*主函数*/ 3、void menu() /*菜单*/ 4、make_card() /*制卡*/ 5、start_card() /*激活*/ 6、get_card() /*消费*/ 7、put_card() /*存款*/ 8、display_card() /*报表*/
9、read_card() /*读卡(读取数据)*/ 10、write_card() /*写卡(记录数据)*/
11、getch();的功能是等待你按键(有时候,需要程序停一下,以便查看结果) 它不影响程序的输出结果。
(四)详细设计
(1)、开头部分
#include<stdio.h>
#include<stdlib.h>
#include<string.h>//头函数名
void menu();
struct card /*定义购物卡的几要素*/ {
char name[20]; /*顾客姓名(即卡号)*/ long int password; /*购物卡密码*/ char start[4]; /*购物卡是否激活*/ float account; /*余额*/ float score; /*积分*/ } card[100];
int length=0; /*制卡数*/
char yes,no; /*是,否(激活)*/
(2)读卡(从文件中读取数据信息)
read_card() /*以只读方式*/ {
FILE *fp; int i;
if((fp=fopen("card.txt","r"))!=NULL) /*以输出方式打开*/
i=0;
while (!feof(fp)) {
fscanf(fp,"%s%ld%s%f%d\n",card[i].name,&card[i].password,card[i].start,&card[i].account,&card[i].score); i++; }
length=i-1; /*记录制卡数*/ fclose(fp); } }
(3)写卡(将数据信息记录到文件中)
write_card() /*以只写方式*/ {
FILE *fp; int i;
if((fp=fopen("card.txt","w"))==NULL) /*以输出方式打开 */ {
printf("写入文件错误!"); getch(); exit(0); } else
for(i=0;i<length;i++)
fprintf(fp,"%s%ld%s%f%f",card[i].name,card[i].password,card[i].start,card[i].account,card[i].score); fclose(fp); return 1; }
(4)制卡(新建出一张购物卡,并输入了顾客部分信息,如姓名、密码等,但卡没有激活,依然不可使用)
make_card() /*{
int i;
i=length; printf("请输入你的姓名:\n"); scanf("%s",card[i].name); printf("请设置你的密码:\n"); scanf("%ld",&password1);
printf("请再输入你的密码 scanf("%ld",&password2); if(password1==password2) {
strcpy(card[i].start,"no"); card[i].account=0; card[i].score=0; length=length+1;
printf("制卡成功,你的购物卡为:\n");
printf("\t姓名\t是否激活\t余额\t积分\n\n");
printf(" %8s %8s %10d %10d\n",card[i].name,card[i].start,card[i].account,card[i].score); write_card();
printf("\n输入任意键返回主菜单...");
getch(); /*程序停一下,等待你按键继续,它不影响程序的输出结果*/ menu(); } else {
printf("对不起,你输入的密码错误!"); printf("\n输入任意键返回主菜单..."); getch(); menu(); }
(5)发卡(激活新建的购物卡,用户能够使用卡进行各项活动)
start_card() /*激活卡号功能设定*/ {
int i,n;
long int password; char name[10]; n=0;
printf("请输入你的姓名:\n"); scanf("%s",name);
printf("请再输入你的密码:\n"); scanf("%ld",&password); read_card();
for(i=0;i<=length;i++) {
if((strcmp(card[i].name,name)==0)&&(card[i].password==password)) {
strcpy(card[i].start,"yes"); n=i+1; } else n=n; }
if(n>0)
{write_card();
printf("激活成功!"); } else
printf("您输入的姓名或密码错误!"); printf("\n输入任意键返回主菜单..."); getch(); menu(); }
(6)消费(进入账户后,取走少于账户金额的钱款进行消费,并在账户减少相应的金额,增加相应的积分)
get_card() /*消费功能设定*/
{
int i,m; float n;
long int password; char name[10]; m=0;
printf("请输入你的姓名:\n"); scanf("%s",name);
printf("请再输入你的密码:\n"); scanf("%ld",&password); read_card();
for(i=0;i<=length;i++)
{
if((strcmp(card[i].name,name)==0)&&(card[i].password==password)&&(strcmp(card[i].start,"yes")==0)) m=i+1; else m=m; }
if(m>0) {
printf("你想消费多少钱:\n"); scanf("%f",&n);
if(n<=card[m-1].account) {
card[m-1].account=card[m-1].account-n; card[m-1].score=card[m-1].score+n;
printf("余额为 %f\n",card[m-1].account); printf("积分为 %d\n",card[m-1].score); printf("交易成功!"); } else
printf("您的余额不足!"); write_card();
printf("\n输入任意键返回主菜单..."); getch(); menu(); } else
printf("您输入的姓名或密码错误或卡未激活!"); printf("\n输入任意键返回主菜单..."); getch(); menu(); }
(7)存款(进入账户后,在金额项加上用户要存入的钱款)
put_card() /*存款功能设定*/ {
int i,m; float n;
long int password; char name[10]; m=0;
printf("请输入你的姓名:\n"); scanf("%s",name);
printf("请再输入你的密码:\n"); scanf("%ld",&password); read_card();
for(i=0;i<=length;i++) {
if((strcmp(card[i].name,name)==0)&&(card[i].password==password)&&(strcmp(card[i].start,"yes")==0)) m=i+1; else
m=m; }
if(m>0) {
printf("您想存入多少钱:\n"); scanf("%f",&n);
card[m-1].account=card[m-1].account+n; printf("余额为 %f\n",card[m-1].account); printf("积分为 %d\n",card[m-1].score); printf("交易成功!"); write_card(); } else
printf("您输入的姓名或密码错误或卡未激活!"); printf("\n输入任意键返回主菜单..."); getch(); menu(); }
(8)报表(显示顾客购物卡上记录的所有信息,除密码外)
display_card() /*显示用户信息功能设定*/
{
int i,m;
long int password; char name[10]; m=0;
printf("请输入你的姓名:\n"); scanf("%s",name);
printf("请再输入你的密码:\n"); scanf("%ld",&password); read_card();
for(i=0;i<=length;i++) {
if((strcmp(card[i].name,name)==0)&&(card[i].password==password)) m=i+1; else m=m; }
if(m>0) {
printf("\t姓名\t是否激活\t\t余额\t\t积分\n\n");
printf(" %8s %8s %20f %10d\n",card[m-1].name,card[m-1].start,card[m-1].account,card[m-1].score); } else
printf("您输入的姓名或密码错误或卡未激活!"); printf("\n输入任意键返回主菜单..."); getch(); menu(); }
(9)菜单(提供各种服务选项)
void menu() {
int i;
printf("\n\n");
printf("\t\t**********************************************\n"); printf("\t\t** 主菜单 **\n"); printf("\t\t** **\n");
printf("\t\t** 1. 制卡(申请购物卡) **\n"); printf("\t\t** 2. 发卡(激活购物卡) **\n"); printf("\t\t** 3. 消费 **\n"); printf("\t\t** 4. 存款 **\n"); printf("\t\t** 5. 报表(购物卡信息) **\n"); printf("\t\t** 6. 退出 **\n"); printf("\t\t** **\n");
printf("\t\t**********************************************\n\n"); printf("请选择您所需服务(1-6):"); scanf("%d",&i); while (i<0 || i>6) {
printf("你输入有误,请再输入!\n"); printf("请选择您所需服务(1-6):"); scanf("%d",&i); getchar(); }
switch(i) {
case 1: make_card(); break;
case 2: start_card(); break;
case 3: get_card(); break; case 4: put_card(); break; case 5: display_card(); break; case 6: exit(0); } }
(10)欢迎界面
main() {
printf("\n\n\n\t\t...o(∩_∩)o 欢迎进入购物管理系统 o(∩_∩)o..."); printf("\n\n\t\t\t按任意键继续。。。");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t设计者—李洋 "); getch(); menu();
}
(五)运行与测试报告(运行结果)
(1) 欢迎界面
(2)主菜单函数
(3)制卡模块
(4)激活模块
(5)余额不足消费
(6)存款积分模块
(7)余额充足消费
(8)报表模块
(9)退出模块
(六) 感想
在这次实习感觉对编程有了一定的了解,特别是对结构体,知道了结构体的构造。对于文件的处理也比以前进步了,但对于为什么打不开文本文件还是不怎么明白,虽然知道用不同的方法打开文件,但操作原理还是不怎么知道。这次实习对我最大的帮助大概就是帮我复习了C语言,同时一次上机的实习操作可以帮助我对编程的了解。
实习开始阶段我只是将书中的程序打进,看它的运行效果,后来才知道其中的原理。在拿到题目后,我刚开始觉得很难,我觉得我不可能完成,因为我根本就不知道怎么回事。后来我请教了学姐,学姐跟我剖析了一下题目。一个购物卡管理系统,首先购物卡包括的内容。制卡,发卡,消费,积分,报表。一张卡包含的内容有卡号,账户名称,卡上的余额,积分,当然会有存钱,此部分应用一个结构体表示。先要设置一个主函数,包含所有。卡的每一个功能都单独成一个模块,作为主函数的调用函数。我觉得其中最难的部分就是文件的打开,我下的程序文件一直都打不开,最后只好再换一个,然后将做好的报告重新打乱。新的程序可以运行,我便将运行结果截下来放入报告,再将整个程序逐步理解。
另外,除去编程,我顺便还学了一些有关电脑,文字图像处理的知识,我觉得此次还是获益良多的。
正在阅读:
C语言课程设计报告 购物卡管理系统05-14
我的玩具小狗作文450字06-18
班级值日生安排表05-03
湘桂铁路扩改工程XG-3标灵川综合行车室实施性施工组织设计-8wr05-28
幼儿教师师德学习心得体会【优秀8篇】03-23
面试时如何用英语自我介绍11-02
《通信建设工程安全生产管理规定》(工信部通信〔2015〕406号)03-09
实验十五-计算机数据光纤传输系统实验09-14
乡镇便民服务中心管理制度04-11
Linux下C语言入门08-30
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 购物卡
- 管理系统
- 语言
- 课程
- 报告
- 设计
- 输电线路毕业设计计算书
- 腾讯公司竞争环境及其发展和竞争战略研究——基于波特五力模型
- 湖南2010会计从业资格考试《财经法规》真题及答案
- 油气管线安装工高级书
- 最新外研版小学英语六年级上册Module 10Unit1公开课教学设计
- 楼面服务实战培训(六大技能)
- 2014年国家公务员考试文史哲知识积累
- 03G和11G图集的不同之处
- 2016-2021年宾馆餐饮行业“一带一路”现状调查及投资竞争力分析报告
- 微机原理与接口技术_期末考试试题答案3
- 2019八年级科学下册4.2各种各样的土壤1同步练习新版浙教版51
- 任意位置过盈锁紧型液压缸在液压锁紧回路中的应用与研究
- 华南理工大学 线性代数与解析几何 习题 (40)
- 会计学(第三章 流动资产)
- 2011内蒙古自治区公选领导干部考资料
- 市政工程监理细则 2
- 第一讲WINDOWS XP 主机使用及安全
- 放射物理与防护练习题
- 2015年山东省春季高考数学模拟试题
- 瓮安县洗马煤矿停产整顿整改报告