资源描述
错误!未找到目录项。
C程序课程设计汇报
题目
车票管理系统
院别
数学和计算机学院
班级
姓名
学号
指导老师
邓永江
二○一五年 六 月
预习汇报
一:设计题目
银行存取款管理设计
二:功效要求
①能够添加和修改和删除用户文件。(在用户文件中,每个用户是一条统计,包含编号、用户姓名、支取密码、用户地址、用户电话、账户总金额)。
②能够输入和查询用户存款取款统计。(在存取款文件中,每次存取款是一条统计,包含编号、日期、类别、存取数目、经办人。类别分为取款和存款两种)。
③能够给程序提供运行提醒。
三:设计要求
①、用C语言实现系统;
②、函数功效要划分好(结构化程序设计);
③、界面友好(良好人机交互),加必需注释;
④、要提供程序测试方案,程序一定要经得起测试,宁可功效少部分,也要能运行起来,不能运行程序是没有价值。
四:设计目标
①、经过这次课程设计,使我们愈加深入地了解和掌握C语言基础概念,切身体会用结构化程序设计工程思想,感受C语言魅力。
②、经过这次课程设计,培养我们独立思索、勇于探索、主动创新、严谨求实、有过必改工作态度和较熟上级操作能力,同时加强我们团结友爱,协作攻关团体合作意识。
取款办理
存款办理
存取款办理
用户资料添加和操作
功效选择
五:设计框架图
相关
存取款查询
添加
修改
删除
查询
取款查询
存款查询
六:函数和变量说明
㈠自定义函数
void main(): 在里面写了“功效选择”SWITCH函数;
void kehu(); 用户资料添加和操作主菜单;
void kehu1(struct cou p[],char *re,long *h); 用户资料查询函数;
void kehu2(struct cou *p,char *re,long h); 用户资料添加函数;
void kehu3(struct cou *p,char *re,long h); 用户资料修改函数;
void kehu4(struct cou *p,char *re,long h); 用户资料清楚函数;
void kehup(struct cou *p,char *re,long *h); 用户资料打印函数;
void cunq1(); 存取款办理选择主菜单;
void cunq11(struct cou *p,char *re,long h); 用户存款资料键入;
void cunq12(struct cou *p,char *re,long h); 用户取款资料键入;
void cunq2(); 存取款选择查询主菜单;
void cunq211(struct cou p[],char *re,long *h); 把用户存款资料从文件读到缓冲区;
void cunq212(struct cou *p,char *re,long *h); 打印存款资料;
void cunq221(struct cou p[],char *re,long *h); 把用户取款资料从文件读到缓冲区;
void cunq222(struct cou *p,char *re,long *h); 打印取款资料;
void help(); 使用说明模块。
㈡变量
①全局结构体型数组w(用来存放200多个结构体变量):
extern struct cou
{
long b;
char x[20];
long m;
char a[50];
long d;
float j;
long bc;
char jin[20];
char jin2[20];
char t[20];
float j1;
float j2;
float j3;
float j4;
} w[200];
②局部变量int m;用来在主和其它函数中进行SWITCH选择判定;
③全局变量long t;用于统计用户卡号,而卡号是在整个程序中全部要用到,因为是全局变量,所以一个用户卡号不能变更。
④char r[20],b[20],c[20];全部为统计用户姓名一维数组,用在生成用户和存取款文件和读取用户文件和存取款文件;
七:函数调用步骤图(用户资料添加和查询 部分 )
void main()
while(1)
scanf("%d",&m);
m=1?
其它函数
是
kehu();
scanf("%d",&m);
switch(m);
m=?
1 2
scanf("%s",b);
kehu1(w,b,&t);
kehup(w,b,&t);
break;
scanf("%s",r);
scanf("%ld",&h);
kehu2(w,r,h);
break;
注:上叙具体函数功效见 六(一)函数说明
八:用户资料添加和查询 部分 设计思想
①、因为是银行存取款管理设计,考虑到要有较周全功效要求,所以在设计之初就对最终成品功效进行了较为具体布局,最终确定了4个主功效(见源代码)。
②、采取了结构化程序设计思想,在主函数外定义了void kehu();(用户文件操作)、void cunq1();(存取款办理)、void cunq2();(存取款查询)、void help();(使用帮助)和她们嵌套函数,使产品功效愈加健全。
③、对于怎样使每次次级操作后能方便返回主界面,我们在主函数里用到了while(1)这么函数,再在里面用到多个break;就实现了返回主界面功效。
④、对于用户及存取款统计保留我们在这里用到了用FILE类型定义文件指针,从而来以文件形式存放数据,而又用到fopen函数打开文件,用fclose关闭文件,释放文件缓冲区;又用到fwrite函数使数据写入到磁盘保留,用fread函数把数据拉到缓冲区。
⑤、对于怎样使用户文件和用户存取款统计很灵活结合到一起,我们在主函数前面结构了一个含有多个组员结构体,从用户文件统计用户地址、用户电话、目前金额等到用户存取款统计办理时间、办理人、存取金额等全部囊括在同一个名为cou结构体类型中。
⑥、程序在主函数之前定义了全局结构体型数组w,为相关文件提供了较为灵活存取空间,而程序中在fwrite函数之前输入了用户姓名和卡号,这实际上就创建了一个名为所输入用户姓名文件, 从而在资料读取时直接用姓名读取很方便。
。
试验总结汇报
九:测试方案
方案①、能够直接打开所给名为“银行存取款及用户资料管理系统.exe”应用程序进行操作,而操作是纯键盘式,提议先添加用户文件,或先查看“相关”中帮助。
方案②、假如是对源代码进行操作,能够双击名为“银行存取款及用户资料管理系统.c”.c文件,进入C++运行环境,按“重新组建”,然后点击运行按钮“!”,运行成功,便可进入主界面,相关操作见上。而这同时C++又在后台生成了.exe文件,这就是我们所需要应用程序。
十:调试中问题及处理方案
调试过程并不是一帆风顺,比如
①、怎样对用户多种具体资料进行表示,之前我们并没有想到用结构体,然后再写程序过程中碰到很多困难,一段时间以后,组员进行仔细研究,并查阅相关书籍,最终确定了用结构体这么便捷数据类型,而这一决定也为后续工作指明了方向;
②、对用户资料打印,因为没有注意到要把文件资料从文件读取到缓冲区,所以一直不能正确打印出所要数据,而最终在组员一致努力下,觉察到问题,然后fread函数被用到,这问题迎刃而解;
③、在程序编写过程中,因为时间关系,难免还有些问题还未处理,我们不怕暴露问题,我们只求进步。比如说在写入用户卡号时,用到fwrite(&h,4,1,fp);这么函数语句,即使h已经被我们定义为long型变量,然为何上限为245至今还未得到很好处理。但这并不影响我们程序运行,只要稍微注意一下卡号,程序还是很理想。
十一:心得和体会
这次C语言课程设计我们付出不少,一次一次编写,一次次修改,花了不少时间,甚至有时也用上了休息时间。但我们收获是那些付出比量不了。在一次次调试和失败中,我们愈加坚强,愈加专注。在团体合作过程中也发生过小小矛盾,但这些终被我们克服,从而转化为难得友谊,而又使我们对团体这个概念认识又上升到一个新高度。其实一切一切,全部没有知识来关键,在这次课程设计过程中我们查阅了大量资料,而有些是书本上全部较少提到,而这些给我们便是知识,无形宝贵财富。
最终,老师提供给我们这次难得课程实习机会,我们是受益匪浅,当看到一个完整应用程序出现在我们面前,作为一个初涉软件学徒来说,又何尝不是感慨万千呢?我们深怀感恩,一路前行,软件工程,我们来了!
十二:附源程序清单
#include<stdio.h>
#include<string.h>
void kehu();
void kehu1(struct cou p[],char *re,long *h); /*(把用户资料)从文件读到缓冲区*/
void kehu2(struct cou *p,char *re,long h); /*用户资料输入*/
void kehu3(struct cou *p,char *re,long h); /*新用户资料输入*/
void kehu4(struct cou *p,char *re,long h); /* 资料清除*/
void kehup(struct cou *p,char *re,long *h); /*打印用户资料*/
void cunq1();
void cunq11(struct cou *p,char *re,long h); /*用户存款资料键入*/
void cunq12(struct cou *p,char *re,long h); /*用户取款资料键入*/
void cunq2();
void cunq211(struct cou p[],char *re,long *h); /*(把用户存款资料)从文件读到缓冲区*/
void cunq212(struct cou *p,char *re,long *h);
void cunq221(struct cou p[],char *re,long *h); /*(把用户取款资料)从文件读到缓冲区*/
void cunq222(struct cou *p,char *re,long *h);
void help();
long t;
extern struct cou
{
long b;
char x[20];
long m;
char a[50];
long d;
float j;
long bc;
char jin[20];
char jin2[20];
char t[20];
float j1;
float j2;
float j3;
float j4;
};
struct cou w[200];
void main()
{
int m;
while(1)
{
system("cls");
printf("\n▂▃▂▃▂▃▂▃▂▃▃银行存取款管理系统▂▃▂▃▃▂▃▂▃▂▃▂\n");
printf("…………………………………【功效选择】……………………………………\n");
printf(" 一:用户添加和操作 二:存取款办理 三:存取款查询 四:相关\n");
printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("------------------------------------------------请按对应数字选择您需要------\n");
scanf("%d",&m);
switch(m)
{
case 1:kehu();break;
case 2:cunq1();break;
case 3:cunq2();break;
case 4:help();break;
}
getchar();
printf("\n\n\n\n\n ┄┅ ┄ ┄ ┄┅ ┄┅按回车键返回主界面...");
getchar();
}
}
void kehu()
{
int m;
char r[20],b[20],c[20];
long h,k;
system("cls");
printf("\n▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄");
printf("\n 用户文件:1:用户资料查询");
printf("\n 2:用户资料添加");
printf("\n 3:用户资料修改");
printf("\n 4:用户资料删除");
printf("\n 5:后退\n\n");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
printf("-------------------------------------------------按对应数字以选择您需要-----\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 1:用户资料查询 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf(" ┭┮┯┬┭ 请输入您要查询用户姓名:\n");
scanf("%s",b);
kehu1(w,b,&t); /*从文件读到缓冲区*/
kehup(w,b,&t); /*打印*/
break;
case 2:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 2:用户资料添加 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("▄▄▄▄▄请输入新用户姓名和卡号(1-245):▄▄▄▄▄\n");
printf("┅┄┅┄请输入姓名:\n");
scanf("%s",r);
printf("┅┄┅┄请输入卡号:\n");
scanf("%ld",&h);
kehu2(w,r,h); /*把数据从缓冲区输入到文件*/
break;
case 3:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 3:用户资料修改 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("\n▄▄▄▄▄请输入您要修改 用户姓名和卡号▄▄▄▄▄:\n");
printf("┅┄┅┄请输入姓名:\n");
scanf("%s",c);
printf("┅┄┅┄请输入卡号:\n");
scanf("%ld",&k);
kehu3(w,c,k); /*把 新数据从缓冲区输入到文件*/
break;
case 4:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 4:用户资料删除 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("\n▄▄▄▄▄请输入您要删除 用户姓名和卡号▄▄▄▄▄:\n");
printf("┅┄┅┄请输入姓名:\n");
scanf("%s",c);
printf("┅┄┅┄请输入卡号:\n");
scanf("%ld",&k);
kehu4(w,c,k); /*把 0 数据从缓冲区输入到文件*/
break;
case 5:break;
default:
fprintf(stderr,"输入有误!");
}
}
void kehu1(struct cou p[],char *re,long *h)
{ FILE *fp;
system("cls");
fp=fopen(re,"rb");
fread(h,4,1,fp);
fread(&p[*h],sizeof(struct cou),1,fp);
fclose(fp);
}
void kehup(struct cou *p,char *re,long *h)
{
printf(" 用户 【 %s 】具体资料\n",re);
printf("┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅");
printf("用户卡号 ");
printf("%ld\n",*h);
printf("┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅");
printf("用户密码 ");
printf("%ld\n",p[*h].m);
printf("┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┅");
printf("用户电话 ");
printf("%ld\n",p[*h].d);
printf("┄┅┄┅┅┄┅┄┅┄┅┄┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf("用户地址 ");
printf("%s\n",p[*h].a);
printf("┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅");
printf("账户目前金额 ");
printf("%.2f\n",p[*h].j);
printf("┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┄┅┄┅");
}
void kehu2(struct cou *p,char *re,long h)
{
FILE *fp;
system("cls");
fp=fopen(re,"wb");
fwrite(&h,4,1,fp);
printf("▄▄▄▄▄请键入用户 【%s】(卡号 【 %ld 】 )用户资料:▄▄▄▄▄\n",re,h);
p[h].b=h;
printf("\n┭┮┯┬┭ 用户密码:\n");
scanf("%ld",&p[h].m);
printf("\n┭┮┯┬┭ 用户地址:\n");
scanf("%s",p[h].a);
printf("\n┭┮┯┬┭ 用户电话:(只接收10位以下号码)\n");
scanf("%ld",&p[h].d);
printf("\n┭┮┯┬┭ 用户目前金额:(提议不要使账户满100万)\n");
scanf("%f",&p[h].j);
fwrite(&p[h],sizeof(struct cou),1,fp);
fclose(fp);
}
void kehu3(struct cou *p,char *re,long h)
{
FILE *fp;
system("cls");
fp=fopen(re,"wb");
fwrite(&h,4,1,fp);
printf("\n▄▄▄请键入用户 【%s】(卡号 【 %ld 】 )新用户资料:▄▄▄\n",re,h);
p[h].b=h;
printf("\n┭┮┯┬┭ 修改后用户密码:\n");
scanf("%ld",&p[h].m);
printf("\n┭┮┯┬┭ 修改后用户地址:\n");
scanf("%s",p[h].a);
printf("\n┭┮┯┬┭ 修改后用户电话:\n");
scanf("%ld",&p[h].d);
fwrite(&p[h],sizeof(struct cou),1,fp);
fclose(fp);
}
void kehu4(struct cou *p,char *re,long h)
{
FILE *fp;
system("cls");
fp=fopen(re,"wb");
fwrite(&h,4,1,fp);
printf("\n\n\n\n ┭┮┭┮┯ 请输入0键以清除 ┭┮┭┮┯:\n");
scanf("%s",p[h].a);
p[h].m=0;
p[h].d=0;
p[h].j=0;
p[h].bc=0;
fwrite(&p[h],sizeof(struct cou),1,fp);
fclose(fp);
}
/*--------------------------------------------------------------------------------------------------------*/
void cunq1()
{
int m;
char g[20];
long m1;
system("cls");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
printf("\n 1.存款办理 2.取款办理 3:后退\n");
printf("\n▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄");
printf("\n\n--------------------------------------------按对应数字以选择您需要-----\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 1.存款办理 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("┭┮┯ 请输入办理存款业务用户姓名和卡号(1-245)┭┮┯ \n\n");
printf("┄┅┄┅输入用户姓名:\n");
scanf("%s",g);
printf("┄┅┄┅输入用户卡号:\n");
scanf("%ld",&m1);
cunq11(w,g,m1); /*存款数据输入*/
break;
case 2:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 2:取款办理 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("┭┮┯ 请输入办理取款业务用户姓名和卡号(1-245)┭┮┯ \n\n");
printf("┄┅┄┅输入用户姓名:\n");
scanf("%s",g);
printf("┄┅┄┅输入用户卡号:\n");scanf("%ld",&m1);
cunq12(w,g,m1);
break;
case 3:break;
default:
fprintf(stderr,"输入有误!");
}
}
void cunq11(struct cou *p,char *re,long h)
{
FILE *fp;
system("cls");
fp=fopen(re,"wb");
fwrite(&h,4,1,fp);
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n\n");
printf(" 存款办理\n\n");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
printf("▂▂▂▂▂请键入用户 【%s】(卡号 %ld ) 存款明细:▂▂▂▂▂▂\n",re,h);
printf("┄┅┄┅请输入存款流水号:\n");
scanf("%ld",&p[h].bc);
printf("┄┅┄┅请输入存款数目(提议不要一次存超出百万):\n");
scanf("%f",&p[h].j1);
p[h].j2=p[h].j+p[h].j1;
p[h].j=p[h].j2;
printf("┄┅┄┅经办人:\n");
scanf("%s",p[h].jin);
printf("┄┅┄┅办理时间(形如06月2日):\n");
scanf("%s",p[h].t);
fwrite(&p[h],sizeof(struct cou),1,fp);
fclose(fp);
}
void cunq12(struct cou *p,char *re,long h)
{
FILE *fp;
system("cls");
fp=fopen(re,"wb");
fwrite(&h,4,1,fp);
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n\n");
printf(" 取款办理\n\n");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n\n");
printf("▂▂▂▂请键入用户 【%s】(卡号 %ld ) 取款明细:▂▂▂▂▂\n\n",re,h);
printf("┄┅┄┅请输入取款流水号:\n");
scanf("%ld",&p[h].bc);
printf("┄┅┄┅请输入取款数目(提议不要一次存超出百万):\n");
scanf("%f",&p[h].j3);
p[h].j4=p[h].j-p[h].j3;
p[h].j=p[h].j4;
printf("┄┅┄┅经办人:\n");
scanf("%s",p[h].jin2);
printf("┄┅┄┅办理时间(形如06月2日):\n");
canf("%s",p[h].t);
fwrite(&p[h],sizeof(struct cou),1,fp);
fclose(fp);
}
/*--------------------------------------------------------------------------------------------------------*/
void cunq2()
{
int m;
char v[20];
system("cls");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n\n");
printf(" 1.存款查询 2.取款查询 3:后退\n\n");
printf("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
printf("---------------------------------------------按对应数字以选择您需要---------\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 1:存款查询 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("┭┮┯┰┱ 请输入您要查询用户姓名:\n");
scanf("%s",v);
cunq211(w,v,&t);
cunq212(w,v,&t);
break; /*注意*/
case 2:
printf(" ┏━━━━━━━━━━━┓\n");
printf(" ▍ 2:取款查询 ▍\n");
printf(" ┗━━━━━━━━━━━┛\n");
printf("┭┮┯┰┱ 请输入您要查询用户姓名:\n");
scanf("%s",v);
cunq221(w,v,&t);
cunq222(w,v,&t);break;
case 3:break;
default:
fprintf(stderr,"输入有误!");
}
}
void cunq211(struct cou p[],char *re,long *h)
{
FILE *fp;
system("cls");
fp=fopen(re,"rb");
fread(h,4,1,fp);
fread(&p[*h],sizeof(struct cou),1,fp);
fclose(fp);
}
void cunq212(struct cou *p,char *re,long *h)
{
printf(" 用户 【 %s 】存款明细\n",re);
printf("┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 用户卡号 ");
printf("%ld\n",*h);
printf("┄┅┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 存款流水号 ");
printf("%ld\n",p[*h].bc);
printf("┄┅┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 类别 ");
printf("存款\n");
printf("┄┅┄┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 存款数目 ");
printf("%.2f\n",p[*h].j1);
printf("┄┅┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 账户目前总金额 ");
printf("%.2f\n",p[*h].j2);
printf("┄┅┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 经办人 ");
printf("%s\n",p[*h].jin);
printf("┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 用户地址 ");
printf("%s\n",p[*h].a);
printf("┄┅┄┅┄┅┄┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
printf(" 办理时间 ");
printf("%s\n",p[*h].t);
printf("┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┅┄┅┄┅┄┅┄┅┄┅┄┅┄┅");
}
void cunq221(struct cou p[],char *re,long *h)
{
FILE *fp;
展开阅读全文