C语言课程设计报告 购物卡管理系统

更新时间:2023-05-14 01:36:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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语言,同时一次上机的实习操作可以帮助我对编程的了解。

实习开始阶段我只是将书中的程序打进,看它的运行效果,后来才知道其中的原理。在拿到题目后,我刚开始觉得很难,我觉得我不可能完成,因为我根本就不知道怎么回事。后来我请教了学姐,学姐跟我剖析了一下题目。一个购物卡管理系统,首先购物卡包括的内容。制卡,发卡,消费,积分,报表。一张卡包含的内容有卡号,账户名称,卡上的余额,积分,当然会有存钱,此部分应用一个结构体表示。先要设置一个主函数,包含所有。卡的每一个功能都单独成一个模块,作为主函数的调用函数。我觉得其中最难的部分就是文件的打开,我下的程序文件一直都打不开,最后只好再换一个,然后将做好的报告重新打乱。新的程序可以运行,我便将运行结果截下来放入报告,再将整个程序逐步理解。

另外,除去编程,我顺便还学了一些有关电脑,文字图像处理的知识,我觉得此次还是获益良多的。

本文来源:https://www.bwwdw.com/article/aj7e.html

Top