ATM取款机系统学生学籍管理系统实现及代码C语言版最终完成版_第1页
ATM取款机系统学生学籍管理系统实现及代码C语言版最终完成版_第2页
ATM取款机系统学生学籍管理系统实现及代码C语言版最终完成版_第3页
ATM取款机系统学生学籍管理系统实现及代码C语言版最终完成版_第4页
ATM取款机系统学生学籍管理系统实现及代码C语言版最终完成版_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、 XXXX大学课 程 设 计课程名称: 程序设计语言课程设计 设计题目: ATM取款机系统实现及分析经典程序代码 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师: 日 期: 教 务 处 制 课 程 设 计 任 务 书 学院 专业 年级学生姓名: 学号: 课程设计题目: ATM取款机系统实现及分析经典程序代码 课程设计主要内容:(1)、读程序。要求学生读两个200行以上的程序,贪吃蛇、学生学籍管理系统。通过读程序,学生应了解大型程序的编写方法、程序的整个结构及框架设计、变量命名的规范、程序的书写规范、及常见问题的算法实现。(2)、写程序。要求学生完成一

2、个管理类的综合型设计:如银行ATM模拟存取系统。要求学生进行数据结构的设计、对函数进行模块化结构化设计、并灵活运用数组、结构体、指针、文件等多种数据类型设计开发系统。通过写程序,学生应掌握用计算机程序设计语言解决实际问题的方法、步骤。该系统应该具有以下功能:1)账户管理功能a) 开户:完成账户注册的功能。即输入账户的相关信息。要求账户号长度12位,密码长度不得低于6位,必须使用暗码,账户信息保存到数组中,账户信息最后保存到相关文件中;b) 账户登录:输入账户、密码,验证是否能够登录该系统;c)密码修改:输入两次相同的密码方可修改。2)账务管理功能a) 存款:每笔存款金额大于0元小于等于1000

3、元,以50元为基本单位。需记录交易日期和时间。b) 取款:每笔取款金额大于等于100元小于等于2000元,以50元为基本单位。需记录交易日期和时间。c) 转账:每笔转账金额大于等于100元小于等于5000元。需记录交易日期和时间。3)查询功能a) 存款记录查询b) 取款记录查询c) 转账记录查询d) 余额查询4)文件功能及其它功能:数据都应保存在相关文件中。设 计 指 导 教 师 (签字): 教学基层组织负责人(签字): 年 月 日 目录一、读程序题部分(贪吃蛇) 1、程序的功能第5页2、主函数分析第5页3、函数的调用关系第5页4、数据变量定义作用第5页5、主要函数的功能、流程图第5页6、程序

4、的不足及改进第7页7、加上注释、改进后的完整代码第7页二、读程序题部分(学生学籍管理系统) 1、程序的功能第13页2、主函数分析第13页3、函数的调用关系第13页4、数据变量定义作用第14页5、主要函数的功能、流程图第14页6、程序的不足及改进第15页7、加上注释、改进后的完整代码第16页三、编程题部分1、设计内容第23页2、设计 第23页(1)数据分析 第23页(2)程序流程分析 第24页3、编码及调试 第34页4、程序运行截图 第53页四、总结与体会 第58页五、参考文献 第60页一、读程序题部分(贪吃蛇) 1、程序的功能 设计游戏界面,包括画墙、画蛇、画食物,并且设置蛇和食物的属性,编写

5、蛇的运动方式和游戏方式。2、主函数分析 主函数中前两行与编写图形程序有关,第三行中调用Speed函数,把Speed函数的返回值付给变量speed;第五行dwall函数的作用是画墙,函数中又调用wall函数来画墙上的砖块3、函数的调用关系4、数据变量定义作用定义食物的横坐标food.x和食物的纵坐标food.y可以有效的随机设置食物出现在界面的任何地方;定义snake.life表示蛇的生死以否,好判断是否结束游戏snake.dir=1;/*方向向右*/定义snake.x0和 snake.y0表示蛇头的坐标,在后面蛇撞墙死的问题上用的到蛇头的坐标;定义蛇的节数snake.node,方便蛇每吃到食物

6、节数增加; 定义snake.level,显示蛇的闯关数5、主要函数的功能、流程图主函数功能:dwall():画墙wall():画组成墙的砖Speed():选择贪吃蛇的速度line():画线函数,画砖的线条gotoxy():定位坐标Play():调用各函数,开始完游戏GameOver():结束游戏流程图:6、程序的不足及改进 (1)不足:没有障碍墙,游戏过于简单;没有游戏奖励,游戏趣味性不高;改进:设置障碍墙,蛇撞到墙也死;代码:设置障碍墙for(j=200;j<=300;j+=10) wall(j,300);/*画横的障碍墙*/for(j=300;j<=350;j+=10) wal

7、l(300,j);/*画竖的障碍墙*/ 蛇撞到障碍墙死的代码 if(snake.y0=300&&snake.x0>200&&snake.x0<=300) /*蛇是否撞到横的障碍墙*/ GameOver();/*游戏结束*/ snake.life=1; /*蛇死*/ break; if(snake.x0=300&&snake.y0>300&&snake.y0<=350) /*蛇是否撞到竖的障碍墙*/ GameOver();/*游戏结束*/ snake.life=1; /*蛇死*/ break; (2)不足:没

8、有游戏奖励,游戏趣味性不高;改进:增加生命值,蛇每吃到三颗食物,则增加一个生命值;代码:定义food.level,在Play函授中初始化,在设置蛇每吃到一颗食物就增长一节身体的代码后加上if(snake.node%3=0) snake.level+; /*除第一关外,其余每吃3 颗食物,就增加一个生命值*/ gotoxy(5,2); printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/ 7、加上注释、改进后的完整代码#include <graphics.h>#include <stdlib.h&g

9、t;#include <dos.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define N 100/*贪吃蛇的最大长度*/#define P 0x1970/*定义暂停功能键*/int i,key;int speed;/*游戏速度*/struct FOOD int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int flag;/*标志是否要出现食物*/food;struct

10、Snake int xN; int yN; int node;/*蛇的节数*/ int dir;/*蛇移动方向*/ int life;/*标志是死是活*/ int level;/*定义生命值(级别)*/snake;void GameOver();/*结束游戏*/void Play();/*玩游戏过程*/void dwall();/*画墙*/void wall(int x,int y);/*画组成墙的砖*/int Speed();/*选择贪吃蛇的速度*/main() int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"

11、;"); speed=Speed();/*将函数返回值赋给speed*/ cleardevice();/*清屏*/ dwall();/*开始画墙*/ Play();/*开始完游戏*/ getch(); closegraph();/*退出图形界面*/void wall(int x,int y) int sizx=9; int sizy=9; setcolor(15);/*白色画砖的上边和左边*/ line(x,y,x+sizx,y); line(x,y+1,x+sizx-1,y+1); line(x,y,x,y+sizy); line(x+1,y,x+1,y+sizy-1); setc

12、olor(4);/*红色画砖的右面和下面*/ line(x+1,y+sizy,x+sizx,y+sizy); line(x+2,y+sizy-1,x+sizx,y+sizy-1); line(x+sizx-1,y+2,x+sizx-1,y+sizy-1); line(x+sizx,y+1,x+sizx,y+sizy); setfillstyle(1,12);/*用淡红色填充砖的中间部分*/ bar(x+2,y+2,x+sizx-2,y+sizy-2);void dwall()/*用前面画好的砖来画墙*/int j;for(j=50;j<=600;j+=10) wall(j,40);/*画

13、上面墙*/ wall(j,451);/*画下面墙*/for(j=40;j<=450;j+=10)wall(50,j);/*画左面墙*/wall(601,j);/*画右面墙*/for(j=200;j<=300;j+=10) wall(j,300);/*画横的障碍墙*/for(j=300;j<=350;j+=10) wall(300,j);/*画竖的障碍墙*/int Speed()/*选择贪吃蛇运行的速度*/ int m;gotoxy(20,10); printf("level 1n"); gotoxy(20,12); printf("level 2

14、n"); gotoxy(20,14); printf("level 3n"); gotoxy(20,16);/*增加一个速度选项*/ printf("level 4nttplease choose:"); scanf("%d",&m); switch(m) case 1:return 60000; case 2:return 40000; case 3:return 20000; case 4:return 10000; default: cleardevice(); Speed(); void Play(void)

15、/*游戏实现过程*/ srand(unsigned long)time(0); food.flag=1;/*1表示需出现新食物,0表示食物已存在*/ snake.life=0;/*标志贪吃蛇活着*/ snake.dir=1;/*方向向右*/ snake.x0=300;snake.y0=240;/*定位蛇头初始位置*/ snake.x1=300;snake.y1=240; snake.node=2;/*贪食蛇节数*/ snake.level=1; /*生命值(级别)初始化*/ do while(!kbhit()/*在没有按键的情况下,蛇自己移动身体*/ if(food.flag=1)/*需要出现

16、新食物*/ do food.x=rand()%520+60; food.y=rand()%370+60; food.flag=0;/*标志已有食物*/ while(food.x%10!=0|food.y%10!=0); if(food.flag=0)/*画出食物*/ setcolor(WHITE);/*设置食物的颜色*/ setlinestyle(3,0,3); rectangle(food.x,food.y,food.x+10,food.y+10); for(i=snake.node-1;i>0;i-)/*实现蛇向前移动*/ snake.xi=snake.xi-1; snake.yi=

17、snake.yi-1; switch(snake.dir) case 1:snake.x0+=10;break;/*向右移*/ case 2: snake.x0-=10;break;/*向左移*/ case 3: snake.y0-=10;break;/*向上移*/ case 4: snake.y0+=10;break;/*向下移*/ for(i=3;i<snake.node;i+) if(snake.xi=snake.x0&&snake.yi=snake.y0)/*判断蛇是否吃到自己*/ GameOver();/*游戏结束*/ snake.life=1;/*蛇死*/ b

18、reak; if(snake.x0<60|snake.x0>590|snake.y0<50| snake.y0>440)/*蛇是否撞到墙壁*/ GameOver();/*游戏结束*/ snake.life=1; /*蛇死*/ break; if(snake.y0=300&&snake.x0>200&&snake.x0<=300) /*蛇是否撞到横的障碍墙*/ GameOver();/*游戏结束*/ snake.life=1; /*蛇死*/ break; if(snake.x0=300&&snake.y0>

19、300&&snake.y0<=350) /*蛇是否撞到竖的障碍墙*/ GameOver();/*游戏结束*/ snake.life=1; /*蛇死*/ break; if(snake.x0=food.x&&snake.y0=food.y)/*判断是否吃到食物*/ setcolor(0);/*用背景色遮盖调食物*/ rectangle(food.x,food.y,food.x+10,food.y+10); snake.node+;/*蛇的身体长一节*/ if(snake.node%3=0) snake.level+; /*除第一关外,其余每吃3 颗食物,就增

20、加一个生命值*/ gotoxy(5,2); printf("The level is %d",snake.level); /*左上角显示出生命值(级别)*/ food.flag=1;/*需要出现新的食物*/ setcolor(YELLOW);/*画蛇(设置蛇的颜色)*/ for(i=0;i<snake.node;i+) setlinestyle(0,0,1); rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi+10); delay(speed); setcolor(0);/*用背景色遮盖蛇的的最后一节*/ rectan

21、gle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1+10); /*endwhile(!kbhit)*/ if(snake.life=1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收按键*/ if(key=UP&&snake.dir!=4)/*判断是否往相反的方向移动*/ snake.dir=3; else if(key=DOWN&&snake.dir!=3)/*判断是否往相反的方向移动*/ snake.d

22、ir=4; else if(key=RIGHT&&snake.dir!=2)/*判断是否往相反的方向移动*/ snake.dir=1; else if(key=LEFT&&snake.dir!=1)/*判断是否往相反的方向移动*/ snake.dir=2; else if(key=P) getch();/*若按P键,则游戏暂停*/ while(key!=ESC);/*ESC键退出游戏*/void GameOver(void) cleardevice(); setcolor(RED); settextstyle(0,0,4); outtextxy(50,200,&

23、quot;GAME OVER,BYE BYE!"); sleep(3);二、读程序题部分(学生学籍管理系统) 1、程序的功能 输入并保存多个学生的学号、姓名、分数的信息,可以查询、添加或删除其中任意学生的信息。而且,统计出学生的平均成绩,找出并显示最高分和最低分学生的信息。2、主函数分析主函数里的的第二行用了一个无限循环语句for(;) ,故而,后面肯定有肯定有跳出循环的语句exit(0);下面用了swich语句,其判断式为menu函数的返回值。根据返回值调用对应的功能函数,执行其对应的操作。3、函数的调用关系4、数据变量定义作用在结构体中定义char num 、char name、

24、int score分别表示学生的学号、姓名、成绩;在menu函数中定义c,把输入的数值赋给c,用c作为函数的返回值,执行对应的操作;在Query_a_record函数中定义char s20用以存放执行查询功能时输入的姓名字符;在Statistic 函数中定义k,j,在分数的循环比较中把stud.score中的两个最值在数组元素里的排列号数分别赋给j和k,以便找到并输出最高分和最低分学生的信息;定义aver做学生的平均值的变量名;在AddfromText函数里定义文件指针fp用以指向保存记录的文件,以便能找到并打开文件;在WritetoText函数里定义文件指针fp用以指向将保存记录的文件。5、

25、主要函数的功能、流程图主要函数的功能: menu() :菜单函数,返回数字选项值 Input() :输入并记录学生的信息 Display():显示学生的信息 Query_a_record() :查找并显示一个学生的记录 Insert_a_record() :插入一条记录 Delete_a_record() :按学生姓名查找,删除一条记录 Sort_by_num() :按学号排序多条记录 Statistic():统计信息,输出记录的条数,学生的平均分,最高分和最低分学生的信息 WritetoText() :将所有记录保存至文件 AddfromText() :从文件中读入数据流程图:开始调用men

26、u函数输入选项值赋给cc<'0'|c>'9' Y N根据返回值对应的 功能调用相应的函数执行相应的操作功能执行完后,再次选择功能menu()的返回值为0 N Y 结束6、程序的不足及改进(1)不足:在第七个功能中,最高分的学生被显示成最低分,而最低分学生被显示成最高分。 改进:调换一下两处的代码位置 (2)不足:在Sort_by_num函数中,用冒泡法学号排序的代码有些繁杂,改用简便些的代码void Sort_by_num(Student stud,int n) /*按学号排序*/ int i,j; Student temp;/*(改动)*/ cha

27、r t10; for(i=0;i<n-1;i+) for(j=0;j<n-1-i;j+) if(strcmp(studj.num,studj+1.num)>0) temp=studj; studj=studj+1;/*(改动)把学号较小的学生排到后面*/studj+1=temp; (3)不足:保存的文件不能读入数据 改进:增加一个读入数据的功能,AddfromText函数,在主函数中增加如下代码,个别地方再稍作改动 case 9: printf("tttOpen a Text filen"); AddfromText(stu,n); /*循环读入数据*/

28、printf("ttt"); system("pause"); break;7、加上注释、改进后的完整代码#include<stdio.h> /*引用库函数*/#include<stdlib.h>#include<string.h>typedef struct /*定义结构体数组*/ char num10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/Student;Student stu80; /*结构体数组变量*/int menu() /*菜单函数*/ char c; d

29、o system("cls"); /*每次选择运行前清屏*/ printf("tt *我的学生管理系统菜单*nn"); /*菜单选择*/ printf("tt *| 1. 输入学生信息 |n"); printf("tt *| 2. 显示学生信息 |n"); printf("tt *| 3. 查找 |n"); printf("tt *| 4. 插入学生信息 |n"); printf("tt *| 5. 删除学生 |n"); printf("tt *

30、| 6. 排序 |n"); printf("tt *| 7. 统计分数 |n"); printf("tt *| 8. 保存至文件 |n"); printf("tt *| 9. 从文件读入数据 |n");/*增加一个选项*/ printf("tt *| 0. 退出 |n"); printf("tt*n"); printf("ttt请作出选择(0-8):"); c=getchar(); /*读入选择*/ while(c<'0'|c>'

31、9'); return(c-'0'); /*c变为空后返回重新选择*/int Input(Student stud,int n) /*输入若干条记录*/ int i=0; char sign; /* x10为清除多余的数据所用*/ while(sign!='n'&&sign!='N') /*判断*/ printf("ttt输入学生学号:"); /*交互输入*/ fflush(stdin); /*以下都为清除多余的输入*/ scanf("ttt%s",studn+i.num); pri

32、ntf("ttt输入学生姓名:"); fflush(stdin); scanf("ttt%s",studn+); printf("ttt输入学生分数:"); fflush(stdin); scanf("ttt%d",&studn+i.score); printf("ttt还要继续吗?(Y/N)"); fflush(stdin); scanf("ttt%c",&sign); /*输入判断*/ i+; return(n+i);void Display(

33、Student stud,int n) /*显示所有记录*/ int i; printf("ttt-n"); /*格式头*/ printf("tttnumber name scoren"); printf("ttt-n"); for(i=1;i<n+1;i+) /*循环输入*/ printf("ttt%-16s%-15s%dn",studi-1.num,,studi-1.score); if(i>1&&i%10=0) /*每十个暂停*/ printf("

34、ttt-n"); /*格式*/ printf("ttt"); system("pause"); printf("ttt-n"); printf("ttt"); system("pause");void Sort_by_num(Student stud,int n) /*按学号排序*/ int i,j; Student temp;/*(改动)*/ char t10; for(i=0;i<n-1;i+) for(j=0;j<n-1-i;j+) if(strcmp(studj.n

35、um,studj+1.num)>0) temp=studj; studj=studj+1;/*(改动)把学号较小的学生排到后面*/studj+1=temp; int Insert_a_record(Student stud,int n) /*插入一条记录*/ printf("tttstudent's num:"); /*交互式输入*/ fflush(stdin); scanf("ttt%s",studn.num); printf("tttstudent's name:"); fflush(stdin); scan

36、f("ttt%s",); printf("tttstudent's score:"); fflush(stdin); scanf("ttt%d",&studn.score); n+; Sort_by_num(stud,n); /*调用排序函数*/ printf("tttInsert Successed!n"); /*返回成功信息*/ return(n);int Delete_a_record(Student stud,int n) /*按姓名查找,删除一条记录*/ char s2

37、0; int i=0,j; printf("ttttell me his(her) name:"); /*交互式问寻*/ fflush(stdin); scanf("%s",s); while(strcmp(,s)!=0&&i<n) i+; /*查找判断*/ if(i=n) printf("tttnot find!n"); /*返回失败信息*/ return(n); for(j=i;j<n-1;j+) /*删除操作*/ studj=studj+1; /*(改动)*/ printf(&qu

38、ot;tttDelete Successed!n"); /*返回成功信息*/ return(n-1);void Query_a_record(Student stud,int n) /*查找并显示一个记录*/ char s20; int i=0; printf("tttinput his(her) name:"); /*交互式输入*/ fflush(stdin); scanf("ttt%s",s); while(strcmp(,s)!=0&&i<n) i+; /*查找判断*/ if(i=n) print

39、f("tttnot find!n"); /*输入失败信息*/ return; printf("ttthis(her) number:%sn",studi.num); /*输出该学生信息*/ printf("ttthis(her) score:%dn",studi.score);void Statistic(Student stud,int n) /*新增功能,输出统计信息*/ int i,j=0,k=0,sum=0; float aver; /*成绩平均值*/ for(i=0;i<n;i+) /*循环输入判断*/ sum+=st

40、udi.score; if(studj.score>studi.score) j=i;/*(改动)判断为真时,把低分赋给studj.score*/ if(studk.score<studi.score) k=i;/*判断为真时,把高分赋给studk.score*/ aver=1.0*sum/n; printf("tttthere are %d records.n",n); /*总共记录数*/ printf("tttthe lowest score:n"); /*输出最低分*/ printf("tttnumber:%s name:%s

41、 score:%dn",studj.num,,studj.score); printf("tttthe hignest score:n"); /*输出最高分*/ printf("tttnumber:%s name:%s score:%dn",studk.num,,studk.score); printf("tttthe average score is %5.2fn",aver); /*平均分*/int AddfromText(Student stud,int n) /*从文件中读入数

42、据*/ int i=0,num; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf("tttInput the filename:"); fflush(stdin); scanf("ttt%s",filename); /*输入文件名*/ if(fp=fopen(filename,"rb")=NULL) /*打开文件*/ printf("tttcann't open the filen"); /*打开失败信息*/ printf("ttt&q

43、uot;); system("pause"); return(n); fscanf(fp,"%d",&num); /*读入总记录量*/ while(i<num) /*循环读入数据*/ fscanf(fp,"%s%s%d",studn+i.num,studn+,&studn+i.score); i+; n+=num; fclose(fp); /*关闭文件*/ printf("tttSuccessed!n"); printf("ttt"); system("

44、;pause"); return(n);void WritetoText(Student stud,int n) /*将所有记录写入文件*/ int i=0; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf("tttWrite Records to a Text Filen"); /*输入文件名*/ printf("tttInput the filename:"); fflush(stdin); scanf("ttt%s",filename); if(fp=fop

45、en(filename,"w")=NULL) /*打开文件*/ printf("tttcann't open the filen"); system("pause"); return; fprintf(fp,"%dn",n); /*循环写入数据*/ while(i<n) fprintf(fp,"学生学号 %-16s学生姓名%-15s学生成绩%dn",studi.num,,studi.score); i+; fclose(fp); /*关闭文件*/ printf("S

温馨提示

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

评论

0/150

提交评论