1、C语言课程设计报告1 银行卡管理系统一、题目要求 请设计银行卡管理系统,要实现系统的主要功能模块有:(1) 实现系统内制卡、发卡功能;(2) 实现系统内卡帐户几相关帐户管理;(3) 实现卡交易和合法性检查;(4) 实现卡金融交易积分功能;(5) 实现卡报表功能;(6) 数据以文件形式存储。提示 制卡:指申请一个银行卡,但还没有使用。 发卡;指该卡已经起用。实现卡交易:指从卡中消费掉一定金额。二、需求分析 根据题目要求,由于数据以文件形式存储,因此应该提供文件的输入和输出等操作;在程序中需要浏览卡帐户信息,应提供显示、查找等操作;另外还应该提供键盘式选择采单实现功能选择。三、总体设计根据需求分析
2、,可以将这个银行卡系统的设计分为5个模块:制 卡、发 卡、管 理、交 易、报 表。银行卡管理系统 报表 交易管理发卡制卡 四、详细设计1 主函数 主函数比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 流程图显示功能选项 输入n,判断n是否是0-6 N根据n的值调用个功能模块函数 Y 将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,便于系统执行完每部分功能模块后能够方便返回到系统界面。程序void menu() int n,w1;/*变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/do void new_card();
3、 void use_card(); void conduct(); void transaction(); void form();puts(ntt*MENU*nn); puts(tttt 1.New card); puts(tttt 2.Use card); puts(tttt 3.Account conduct); puts(tttt 4.Transaction); puts(tttt 5.Report form); puts(tttt 6.Exit);puts(nntt*n); printf(Choice your number(1-6): bb); scanf(%d,&n); if(n
4、6) /*对选择的数字作判断*/ w1=1; getchar(); else w1=0; while(w1=1); /*选择功能*/ switch(n) case 1:new_card();break; case 2:use_card();break; case 3:conduct();break; case 4:transaction();break; case 5:form();break; case 6:exit(0); main() menu(); 2 各功能模块设计(1)制卡模块需求分析该模块的功能是增加新的卡,也就是新的帐户,让系统自动设置帐户原始信息(卡号自动加1,用户名为NO,
5、钱数和积分都为0)。采用追加的方式保存。分析由题目知,系统内的数据有卡号、姓名、钱数和积分。单独看各数据信息,卡号和积分是整数,可以采用整型;姓名是字符型,采用字符型数组;钱数有可能为小数可采用实型。数据信息存放在文件中,一条记录对应一个帐户。用结构体数组存放若干个帐户信息。 struct user int num; char name10; float money; int score; user30;流程图调用加载函数n=load_user(),并计算可以记录个数n 保存追加的记录设置要追加的帐户数据 程序/*制卡模块*/void new_card() /*制卡模块*/ int n,i;
6、n=load_user(); usern+1.num=n+1; /*设置帐户数据*/ strcpy(usern+1.name,NO); /*设置帐户数据*/ usern+1.money=0;usern+1.score=0; /*设置帐户数据*/ save(n+1); printf_onedata(n+1); menu();(2)发卡模块需求分析 该模块的功能是起用新的卡,就是把新的卡的用户名设置为实际用户的名字,钱数和积分以用户的实际数据设置,从键盘中输入并写到原来输入文件中。 流程图调用加载函数n=load_user();并计算可以记录个数n 输入要起用的卡数c 查找用户名为NO的卡 是否找
7、到此卡 b=c记录找到的卡数b返回菜单 Y N 调用命名函数,修改帐户信息保存修改记录返回菜单N Y 程序/*发卡模块*8*/ void use_card() /*发卡模块*/ int n,c,b=0,i,k=-1; n=load_user(); printf(How many new cards do you want ? bb); scanf(%d,&c); /*输入需要的卡数*/ for(i=0;i=c)printf(nThere is a new card!n);name(i); /*调用命名函数*/ else menu(); if(k=-1) printf(nthere is no
8、new card!n);menu(); (3)管理模块 需求分析该模块的功能有两个,一是显示所有帐户记录,二是根据输入的卡号查找对应的帐户信息。 该模块采用菜单的形式分成3个部分:浏览模块,查找模块,退出。 流程图 显示功能选项 输入n,判断n是否是0-3 N Y根据n的值调用个功能模块函数 程序 /*管理模块*/void conduct() int n,w1; do void browse_data(); int search_data(); puts(ntt*MENU*nn); puts(tttt 1.Browse all); puts(tttt 2.Search); puts(tttt3
9、.Back); puts(nntt*n); printf(Choice your number(1-3): bb); scanf(%d,&n); if(n3) w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:browse_data();break; case 2:search_data();break; case 3:menu();break; (4) 浏览模块 需求分析该模块的功能是显示所有帐户信息。 流程图 显示帐户信息(10个一屏)按任意键显示下一屏 按任意键返回菜单 程序 /*浏览模块*/ void browse_da
10、ta() /*浏览模块*/ int n; n=load_user(); printf_data(n); printf_back(); (5)查找模块 需求分析 该模块的功能是根据输入的卡号查找对应的帐户信息。查找完就返回到管理模块的菜单。 流程图 输入要查找的卡号 是否找到此 帐户信息 Y N 显示找到的帐户信息提示没有找到询问用户是否继续查找 Y N返回管理模块菜单让用户选择 1)查找另一个 2)返回管理模块菜单 程序/*查找模块*/void search() /*查找模块*/ int i,n,k,w1,w2,w3; struct user u; n=load_user(); do do k
11、=-1; printf(nnEnter number that you want to search! NO:); scanf(%d,&u.num); /*输入要查找的卡号*/ for(i=0;i.again 2.No and back bb); scanf(%d,&w1); if(w1=2)menu();break; while(k=-1&w1=1);printf(nnwhat do you want to do?nt1.Search another 2.Back menu bb); scanf(%d,&w2);while(w2=1); conduct();(6)交易模块 需求分析 该模块的
12、功能是实现用户普通交易和金融交易,对交易后卡内钱数扣减和积分的增添。该模块有3部分:普通交易,金融交易,返回。 流程图 输入要进行交易的卡号是否找到此 帐户信息 Y N 提示没有找到显示找到的帐户信息 返回管理模块菜单让用户选择 1)普通交易 2)金融交易 3)返回 程序/*交易模块*/ void transaction() /*交易模块*/ int i,w2; void printf_face(int i); i=search_data(); if(i!=-1)printf_face(i); /*调用显示菜单函数*/ void printf_face(int i) /*显示菜单函数*/ in
13、t w2; printf(nn What do you want to do?mon transaction 2.financial transaction 3.back bb);scanf(%d,&w2);switch(w2) case 1: common(i);break; case 2: financial(i);break; case 3:menu();break; (7)普通交易模块 需求分析 该模块的功能是根据用户输入的交易数据进行钱数的扣减,然后保存修改。 流程图 输入要交易的金额交易金额是否大于或等于卡内金额 Y N 询问用户是否继续交易进行钱数的扣减并保存提示输入错误 Y N
14、让用户选择 1)再交易 2)返回交易模块菜单返回交易模块菜单 程序 void common(int i) /*普通交易模块*/ int t,n; float w; load_user(); printf(Imput how much: bb); scanf(%d,&w); /输入交易金额*/ if(useri.money=w) printf(nIt is allowed!n); useri.money-=w; save(i); else printf(nInput Error!n); printf_face(i); (8)金融交易模块 需求分析 该模块的功能是根据用户输入的金融交易数据进行钱数
15、的扣减和积分的增添,然后保存修改。 流程图 输入要交易的金额交易金额是否小于或等于卡内金额 Y N 进行钱数的扣减和积分的增添并保存提示输入错误 询问用户是否继续交易 Y N返回交易模块菜单让用户选择 1)再交易 2)返回交易模块菜单 程序 /*金融交易模块*/ void financial(int i) /*金融交易模块*/ int t,n; float w; load_user(); printf(Imput how much: bb); /*输入交易今额*/ scanf(%d,&w); if(useri.money=w) printf(nIt is allowed!n); useri.m
16、oney-=w; useri.score=w; save(i); else printf(nInput Error!n); printf_face(i); /*调用显示菜单函数*/ (9)报表模块 需求分析该模块的功能是显示用户需要显示的帐户信息。先根据用户输入的卡号查找对应的帐户信息,再显示在屏幕上。 流程图 让用户选择是否报表1)是 2)否,退出 (1) (2) 让用户选择 1)查找2)返回主菜单 (2) (1) 显示找到的帐户信息返回主菜单 程序/*报表模块*/void form() /*报表模块*/ int w; printf(nDo you want to see the form?
17、nt1.YES 2.NO and Back bb); scanf(%d,&w); switch(w) case 1: search_data();menu(); /*调用查找函数*/ case 2: menu();break; /*返回主菜单*/ getch(); 3 公共函数下面是在每个功能模块中都有可能用到的一些公共函数。 (1)加载函数load_user() 说明 该函数可以用来加载所有记录,并且可以返回所有记录的个数。 程序 /*加载记录或可以计算记录个数的函数*/ int load_user() /*加载记录或可以计算记录个数的函数*/ FILE *fp; int i; if(fp=
18、fopen(USER.txt,r)=NULL) /*以输出打开方式,在此前的记录被覆盖*/ printf(nCannot open filen); exit(0); for(i=0;!feof(fp);i+) fscanf(fp,%d %s %f %dn,&useri.num,useri.name,&useri.money,&useri.score); fclose(fp); return(i); /*返回记录个数*/(2)保存函数save(int n) 说明 形参n控制保存的个数。 程序 /*保存函数*/ void save(int n) /*保存函数,保存n个记录*/ FILE *fp;
19、if(fp=fopen(USER.txt,a)=NULL) /*以加载打开方式,数据加在文件末尾*/ printf(nCannot open filen); exit(0);fprintf(fp,%d %s %d %dn,usern.num,usern.name,usern.money,usern.score); fclose(fp); (3)命名函数name(int i) 说明 该函数是为新卡命名,达到起用卡的作用。 程序 /*命名函数*/ void name(int i) /*命名函数*/ char c10; nt b, j; float a; printf(Input the name:
20、 bb); scanf(%s,c); /*输入用户名*/ strcpy(useri.name,c); /*命名*/ printf(Input the num and score: bb); scanf(%d,%d,&a,&b); useri.money=a; useri.score=b; printf_onedata(i); save(i); /*保存*/ (4)显示函数printf_data(int m) 说明 形参m表示第m个用户记录 程序 /*显示函数printf_data(int m)*/ void printf_data(int m) int j,n; n=load_user();
21、for(j=0;jExit.t2.Back: bb); scanf(%d,&w); if(w=1)exit(0); else conduct(); (6)显示一个记录的函数printf_onedata(int j)说明 形参j表示第j个用户记录程序 /*显示一个记录的函数*/void printf_onedata(int j) /*显示一个记录的函数*/ printf(nuser_num user_name user_money user_scoren); printf(%2d %4s %8f %8dn ,userj.num,userj.name,userj.money,userj.score
22、); (7)另一查找函数search_data()程序 /*另一查找函数*/int search_data() /*另一查找函数*/ int i,n,k,w1=1,w2,w3,w4; struct user u; n=load_user(); do k=-1; printf(nnEnter number that you want to search! NO:); scanf(%d,&u.num); for(i=0;i.again 2.No and back bb); scanf(%d,&w1); if(w1=2)menu();break; while(k=-1&w1=1); return(k
23、);五、上机操作1 数据源 001 liang1 112 112002 liang2 121 161003 liang3 111 111004 liang4 111 161005 liang5 151 111006 liang6 111 171007 liang7 117 181008 liang8 111 191009 liang9 181 111010 liang10 111 311011 liang11 181 111012 liang12 111 111013 liang13 191 191014 liang14 154 117015 liang15 113 121 2 编译、连接和运行3 结果下面是各个模块的界面图:(1)主菜单函数 (2)制卡模块 在主界面出现后输入1回车看见下图: (3)发卡模块 在主界面上输入2 回车,再根据提示输入数据,可以看见下图: (4)管理模块 (5)浏览模块 在管理模块界面出现后按1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1