C语言程序设计实验报告_第1页
C语言程序设计实验报告_第2页
C语言程序设计实验报告_第3页
C语言程序设计实验报告_第4页
C语言程序设计实验报告_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、西南交通大学程序设廿综合实验(课程代码0474002)实验地点:7507实验学期:大一(下)学生班级:软件工程(3)学生学号:2013221 1学生姓名:一向上吧、少年一任课教师:龚勋信息科学与技术学院2014年3月实验一:atm机用户操作界面及业务逻辑 编写实验目的及内容根据atm的工作流程编写用户界面,掌握文木用户菜单的编写方法。根据atm的工作流程编写其业务逻辑,掌握搭建一个完整应用系统的方法及软件编程思想。实验要求(1)除提示用户输入的数字外,界面上不能响应、出现任何其它用户输入;(2)每个菜单界面独立显示,不要出现多组菜单重叠显示的现象;每个业务逻辑可以多次执行,直到用户选择退出业务

2、;(3)用户选择一种语言后,进入主业务界面。下面以以中文界面为例介绍其它业务。实验步骤及核心代码1. 将不同的菜单分别用不同的函数实现:void mainmenu():主界面void mainmenu()isystem(nclsn);cout«m="«endl;cout«"1.中文u«endl;cout«h2.englishh«endl;cout«u3.退出 wexith«endl;cout«n=h«endl;void languagemenu(int flag):语言菜单

3、void languagemenu(int flag)if(flag=l)system(nclsn);cout«n=h«cndl; cout«"1.查询u«endl;cout«h2.存钱u«endl;cout«h3.取钱u«endl;cout«n4 退出n«cndl;cout«h=h«endl; elsesystem(hclsn); cout«h=h«endl; cout«n1 .queryu«endl;cout«p

4、2.depositn«endl;cout«"3. withdrawm«endl;cout«h4.exitu«endl;cout«n=h«cndl;void qucry(int flag):查询菜单void query(int flag)if(flag=l)system(nclsn);cout«*-="«endl;cout«h此账户余额:“;cout«moncy;cout«"元 m«endl;cout«"请按任意键继续

5、.h«endl;cout«n=h«endl; elsesystem(mclsm); cout«n=n«endl; cout«nthis account is: m;cout«money;coutvv” rmbu«endl;cout«nplease press any key continueu«endl;cou1-=h«endl;void deposit(int flag):存款菜单 void deposit(int flag)float addmoney=0;if(flag= 1)

6、system(mclsn); cout«h=h«endl; cout«-请输入您要存的数目:“;cin»addmoney;money=addmoney+money;cout«n 您刚才存入 了 "vvaddmoneyvv” rmb"«endl; cout«"存款成功! n«endl;cout«n请按任意键继续u«endl; cout«h=h«endl;elsesystem(nclsm);cout«*-="«endl;

7、 cout«nthe number of deposits is you want: n; cin»addmoncy;money=addmoney+money;cout«myour money is h«addmoney«m rmbh«endl;cout«hsuccess! h«endl;cout«hplease press any key continueu«endl; cout«h=h«endl;void withdrow(int flag):取款菜单void withd

8、row(int flag)float withdraw=o;if(flag=l)system(nclsn);cou1-=n«endl; cout«u请输入您要取款的数目:“; cin»withdraw;money=money-withdraw;cout«n 您刚才取 tn«withdraw«" rmbm«endl; cout«"取款成功! "vvendl;cout«"请按任意键继续 n«endl; cout«,t=,«endl;else

9、system(” cis”);cout«n=h«cndl; cout«nthe number of withdraw is you want: h;cin»withdraw;money=money-withdraw;cout«myour money is h«withdraw«n rmbm«endl; cout«hsuccess! h«endl;cout«nplease press any key continueh«endl; cout«h=h«endl

10、;2. 系统主逻辑代码:主要通过int main():主函数实现代码:int main()char input=,o,input_ol=,o,; int num;int flag=();while(input!=3r)mainmenu();input=getch();switch(input)caset: flag=1;whilc(i 叩 ut_01 !='4)languagemenu(flag); input_01=getch();switch(input_01)case 1 r: query(flag); num=getch();break;case 2: deposit(flag

11、); num=getch();break; case 3: withdrow(flag); num=getch(); break;case 4: input_()l=4; break;default:break;input_ol 二'o' flag=0;break;case 2: flag=2;while(input_01!二4)languagemenu(flag); input_ol=getch(); switch(input_ol) case t: query(flag); num=getch();break; case 2: deposit(flag); num=getc

12、h();break; case 3f: withdrow(flag); num=getch(); break; case 4: input_01=4; break;default:break; input_01='0' flag=0; break;case 31: input-3f;break; default:break;return 0;实验二:进制转换器程序逻辑实现编写实验目的及内容根据所学知识做一个进制转换器,可以实现进制之间的反复转换。实验要求(1)装换要求包括整数和小数。(2)提供清晰、友好的界面。(3)各种转换可以反复多次执行,知道用户选择"退出”按钮。

13、实验步骤及核心代码(1)程序函数模块:void mainmenu();/主界面void menu_01(); void mcnu_02(); void menu_03();十进制-二进制-> 十六进制二进制-十进制十六进制十六进制-> 十进制二进制string function_01(int number);十进制整数转二进制整数string function_02(double number,int len);十进制小数转二进制小数double function_04(char *pl,char *p2); 二进制转换为十进制 char b2h4bit(string s);(2)

14、程序主要代码逻辑:void mainmenu() 主界面:system("cls");systemc'title 进制转换器”);printf("nnntwclcomc!tc 语言进制转化器nnn");nnu);printf(nt printf(ht printf(ht printf(ht printf("t printf("t printf(ht printf(ht printf(ht printf("t printf(nt printf(ht printf(ht printf(ht printf("tp

15、rintf(hntttt 西南交通大学软件三班”); printf("nnntttt(=a_a=)温馨提示:请按提示输入”);void menu_01()double number_oi;string s,sl,s2,s3,s4,s5;double numol;system(ncls");systemc* title 进制转换器”);printf("nnntwelcome!t c 语言进制转化器nnm); printf(ntprintf(httb转换方式:十进制二进制-十六进制nnu);printf(nt« 请输入您所需转换的十进制u:nnttb转换数字

16、(number): “); scanf("%lf',&number_01);if(number_01=l)numo 1 =number 01 -(int)number o i;s 1 =function_01 (int)number_01); s2=function_02(num01,8);s3=function_03(s 1);s4=function_03(s2);printf(hnntttb 二进制结果:%s.%s (b)n,sl.data(),s2.data(); printf("nnttth 十六进制结果:%s.%s (h)",s3.dat

17、a(),s4.data(); elses=function_02(number_01,8);s3=function_03(s);printf("nnttt 二进制结果:0.%s (b)”,s.data();printf(mnnttt 十六进制结果:0.%s (h)”,s3.data();printf(hntprintf(hnntt人请按任意键返回上一次界面.“);ivoid menu_02()char str20,*p;int flag=0,location;p=str;system("clsn);systcmc'titlc 进制转换器”);printf(hnnnt

18、welcome!tc 语言进制转化器nnm);printf(ht®转换方式:二进制-十进制->十六进制nnu);printf(nt« 请输入您所需转换的二进制数:nnttb转换数字(number): “); gets(p);if(strlcn(str)=o)gets(p);for(int i=o;i<strlen(str);i+)if(stri=,.')flag=1;location=i;break;elseflag=2;if(flag=l)string s,sl,s2,s3=”.”; for(int i=o;i<strlen(str);i+)if

19、(i<location) sl=sl+stri;if(i>location) s2=s2+strij; if(s2.1ength()<4|s l.length()<4) while(s2.1ength()<4) s2 二s2+”0”;while(s l.length()<4) sl=u()n+sl;if(s2.1ength()<8&&s2.1ength()>4) while(s2.1ength()<8) s2=s2+”0”;if (s 1 .length()>4&&s 1 .length()<8)

20、while(s l.length()<8)sl=uou+sl;s l=function_03(s 1 ).data();s2=function_03(s2).data();s=sl+s3+s2;printf("nnttth 十进制结果:%g (d)",function_04(p,p); printf("nnttth 十六进制结果:%s (h)'s.data();printf(hntprintf(hnntt八_人请按任意键返回上一次界面“);if(flag=2)printf("nnttth 十进制结果:%g (d)'function_

21、04(p,p); printf(mnnttth 十六进制结果:%s (h)",function_03(str).data(); printf(hntprintf(” nntt八_人请按任意键返回上一次界面°);void menu_03()char strl 0,*p,s20,*p 1;string ret=u"p=str; pl=s;systcmc'cls");systemc'title 进制转换器”);printf("nnntwelcome!t c 语言进制转化器nnm);printf(ntprintf("tth转换

22、方式:十六进制-十进制二进制 nn");printfcmw 请输入您所需转换的十进制数:nnt. 转换数字(number):“); gets(str);if(strlen(str)=o)gets(str);while(*p!=,0,)if(*p=*o') ret=ret+noooom;if(*p=t)ret=ret+n0001n;if(*p=,2,) ret二ret+“0010”;if(*p=3l)ret=ret+,ooir,;if(*p='4*) ret=ret+"0100"if(*p二二 3)reeet+“0101”;if(*p=t6,) re

23、t=ret+,0110n; if(*p=7i)ret=ret4-u01ir,; if(*p=-8')rct=rct+h1000n; if(*p=9)ret 二 ret+tool”; if(*p二=<y)ret=ret+mloioh; if(*p='b*) ret=ret+"1011" if(*p=c)ret=ret+”1100”;if(*p二二 d)rct 二 rct+tlol”;if(*p 二二e)ret 二 ret+tllo”; if(*p 二二二 ret+tlll”;if(*p=-.*) ret=ret+'*.m;p+;strncpy(s

24、,ret.c_str(),ret.length();printf("nntto 二进制结果:%s (b)",ret.data(); printf(nnnttth 十进制结果:%g (h)",function_04(p 1 ,p 1); printf(mntprintf(unntt a_a请按任意键返回上一次界面”);string functional(int number)/十进制整数转二进制if(number=o)return ”0”;string ret=uh;int remain;int quot=numbcr; while(quot)remain=quot

25、%2;quot=quot/2;if(rcmain=l)ret 二 t+ret;elseret=,o,+ret;return ret;string function_02(double numberjnt len)/十进制小数转二进制小数 string ret;double product=number;while(len>0)product*=2;if(product>=l)ret=ret+"lh;product1.of;elseret+=m0m;len;return ret;string function_()3(string s)二进制转换为 16 进制int ist

26、rlen=s.length();int izeronum=istrlen%4; izeronum=(4-izeronum)%4;while(izeronum)s=hon+s; izeronum-;int num=s.lcngth()/4;string ret;for(int i=0;i<num;i+)string spre=s.substr(0,4);s=s.substr(4,s.length()-4); ret+=b2h4bit(spre);return ret;double function_04(char *pl,char *p2)二进制转换十进制 double sum,num02

27、,num03;sum=0; num02二 1; num03=0;while(*pl!=,. '&&*pl!=w)num02+;pl+;p1=p2;whilc(*pl !='.')if(*pl=t) sum=sum+pow(2,num02); pl卄; num02;elsenum02;pl+;while(*pl!=,0,)if(*pl=t)sum=sum+pow(2,num03);numo3;ph+;1elsei numo3;pl+;)return sum;ichar b2h4bit(string s)1char ret;if(s二二 “()00()”)r

28、et=,0,;else if(s=n000r,)ret=*r;else if(s="0010m)ret=,2,;else if(s=“0011”)ret=,3,;else if(s=h0100m)ret=,4,;else if(s='0101n)ret='5*;else if(s=u0110u)ret=,6,;else if(s二=“0111“)ret=,7,;else if(s=,1000h)ret=,8,;else if(s=t001”)ret=,9,;else if(s=n1010n)ret=,a,;else if(s=t011”)rct=,b,;else if

29、(s二二t100”)ret=,c,;else if(s=t101”)ret=,d,;else if(s=h1110")ret=,e'else if(s二二till")ret=,f,;return ret;)(3)程序运行截图:weleone?c语言进制转化器2.4.1-十进制-二进制-十六进制 二进制- 十进制- 十六进制 十六进制一 十进制- 二进制 退岀exit-西南交通大学软件三班"_八=温馨扌杲不:请按扌昱7f输入welcome?c语言进制转化器转换方式:十进制一 二进制一 十六进制请输入您所需转换的十进制数:转换数字(nimber) : 10.1

30、2二进制结果: 十六进制结果:a.1e h八请按任意键返回上一次界面请输入您所需转换的二进制数:转换数字(nimber) : 1001.101十进制结果:9.625 <d> 十六进制结果:9.a <h>八请按任意键返回上一次界面we leone?c语言进制转化器请输入您所需转换的十进制数:转换数字(number) :a.d二进制结果:1010.1101 <b> 十进制结果:10-8125 <h>八请按任意键返回上一次界面实验二:随机数生成实验编写实验目的及内容根据所学知识生成一组均匀的随机数,并根据随机数编写一个简单地抽奖程序。实验要求(1)能够

31、根据用户的输入,控制随机数生成的数目,随机数用动态数组进行保存。(2)能够根据用户的输入,控制随机数的范围:比如能够生成一组【a,b】范围内的随机数。(3)抽奖人数有用户自行输入。(4)为每一个人分配一个代号和一个随机数,并将其打印出来。(5)有机器摇号:生成一个在1n之间的随机数为中奖号码,查找中奖者,并公布中奖 信息(注:可以有多个人同时中奖):(6)如果没有对对应的中奖者,需要将该号码公布出来,然后重新生成一个中奖号码,直 到抽到中奖者为止。实验步骤及核心代码(1)先为抽奖者定义一个结构体,并为结构体中请内存空间struct people)int name; 姓名int number;

32、/抽奖号码;struct people *p;p=(struct people *)malloc(a*sizeof(struct people);(2) 动态主成抽奖号码:for(int i=o;i<number;i+)pi. name 二 i;plij.number=rand()%100;printf(',%d:p%d,his number is:%dn",i+l,,pi.number); 生成获奖号码:winner_number=rand()% 100;(4)主逻辑代码实现:while(flag!=l) /flag 为设定的标记fbr(i=o;i<

33、;number;i+)if(pi.number=winner_number)flag=1;cout«"the winner is: p"««" u«uhis number is :"«pi.number«endl; if(flag!=l)cout«"thc valid lottery number is:"<<c«cndl«"prcss any key to try againh«cndl; getc

34、h();winner_number=rand()% 100;cout«"thc valid lottery number is: ,«winncr_numbcr«cndl;(5)程序运行截图:"h:c语言编程实验3debuinput the total nunber of the people:10information of all:pl: p0,hisnunberis :78j2:pl,hisnunberis:84|3 :p2,hisnumberis :644:p3,hisnunberis: 57(5 :p4iisnunberis :18n

35、: p5 j-hisnunberis :29f?:p6,hisnunberis :11nunberis :96(9 :p8,hisnunberis :2610:p9j.his press any the valid hpress any the valid press any the valid press any the ualid press any |the ualid hpress any the ualid press anynunber is:50 key to draw lotlottery number is:32 key to try again lottery nunber

36、 is key to tpy again lottery nunber is:24 key to tfy again lottery number is:65 key to tfy again lottery number is:39 key to try again lottery number is:5 key to tpy again the winner is: pl bis nunber is :84 the ualid lottery number is: 84 press any key to continue实验四:插入排序和快速排序编写实验目的及内容根据所学知识生成一组随机数

37、组,对该组数据进行排序,采用插入排序和快速排序。实验要求(1)数组的长度由用户输入。(2)随机数的范围在100,10000范围内。(3)采用插入排序和快速排序的方法实现。(4)根据用户的要求可以实现增序、降序两种排序。实验步骤及核心代码插入排序算法快速排序算法void sort(int arrayj4nt count)/ 增序void quicksort(int arraylj,int 1)同为增序/iint ij,k;iint i=0,j=l-l;for(i=l ;i<count;i+)int k=array0;if(l>l)k=arrayij;for(j=i;j>=l;j

38、-)while(i<j)if(t<=arrayfj-l)aitayj=arrayj-l;elseif(arrayj>k)arrayjj=k;arrayij=array|jj;break;break;arrayj=l;fbr(;i<j;i+)1if(arrayi<k)/iarray j=aitayi; break;arrayi=k;quicksort(anay,i);quicksort(array+i+1,1-1 -i); 实验五:程序调试工具:模块计时器编写实验目的及内容设计一组计时函数,封装所有计时函数,采用测试性能函数对快速函数、插入函数、选择排 序算法进行性

39、能测试。实验要求(1)计时精确:封装的高精度的计时api函数queryperformancecounter(),可以达到微秒级 的精度。(2)使用简单:只用在待测试的模块前后加上两个宏bm_start和bm_end,不需要对结 果进行计算,也不需要考虑对各个模块结果数据的维护。(3)多组测试:最多可以同时实现20个模块的测试,及可以保存20组数据;(4)结果输出独立:在系统运行结果时,只需要用一个函数就可以把计时结果保存在一个 文本文件里。实验步骤及核心代码(d数据结构:#def ine benchmark_max_cout 20double gstartsbenchmark_max_cout

40、; double gendsbenchmark_max_cout; double gcountersbenchmark_max_cout; doubie dffreq二1;doubie dfm i nus,dft ime;large,integer i itmp;(2)函数封装:void i n i tbenchmark () ;/初始化void bmtimestart 0 ;/开始计时void bmtimeend () :/计时结束void wr itedata (int tota icout) ;/保存数据(3)具体模块实现:void ini tbenchmark ()queryperfo

41、rmancefrequency(&l itmp); dffreq= (doubie)i itmp. quadpart;void bmtimestart ()queryperformancecounter (&l itmp);gstartscout = (doubie)i i tmp. quadpart;void bmtimeend ()queryperformancecounter(&l itmp);gends cout = (doubie)i i tmp. quadpart;gcounterscout+二(gendscout-gstartscout)/dffreq)*

42、1000000); pr intf ct 时间:%lfusn", gcounterscout);cout+;void wr itedata(int totaicout)file *fp;i f (fp二fopen cd: 测试数据.txt", "w+") =null)pr intf ("can not open the fi le!n");exit(0);fpr i ntf(fp, "%sn", "mod ietest1");for (int i=1;i<cout;i+)fprintf(f

43、p,"%s %dtt: %lf usn","total", i,gcountersi); fciose (fp);(4)主函数:vo i d ma i n ()char path=,zd:测试数据.txt"ma i nmenu ();i n i tbenchmark ();bmtimestart ();/blocko;/工作模块sleep (2000) ; /使用sleep ()函数进行简单测试bmtimeend ();printf ct 测试完毕! n);wr itedata (cout);printf (,zt数据文件保存地址为:%sn:

44、path);getchar ();(5)运行截图:实验六、七:学生信息管理系统编写实验目的及内容用单链表实现一个小型学生管理信息系统,实现除存储以外其他基本的信息管理功能,并对 数据进行保存。实验要求(1)编写友好用户界面(2)采用带头结点的单链表实现对数据的组织,不允许使用数组。(3)学生信息必须包括学号,姓名,成绩。(4)实现添加,删除,显示总人数,打印全部的功能,并对数据进行排序。(5)用文本文件格式进行数据的保存和读取。(6)文件的存储路径,提示用户输入。(7)数据读入后能够修改,保存。(5)用二进制格式进行数据的保存和读取。(8)文件的存储路径,提示用户输入。(9)数据读入后能够修改

45、,保存。实验步骤及核心代码(1)主要代码结构。case t:add_student(list); break;case ,2,:query_student(list); break;case 31: edi t_st uden t( list); break;case delete.studentclist); break;case 3:print_student(list); break;case 6:print_all();break;case 7,:save_wenben(list); break;case 8:re"d_wenben(list); break;case ,9,

46、:save_eijinzhi(list); break;case a:rcad_cijinzhi(list); break;case breturn;(2)代码实现。void add_student(student *head)int szjen;struct student *current=null; while(l)current=(struct student*)malloc(sizeof(struct student);while(l)printf("请输入学生信息:n");printf(”学号:”);scanf("%sn,current->num

47、ber); len=strlen(current->number);if(len=4)if(strcmp("0000',ciirrcnt->numbcr)=0)delete(current);system(nclsn);return;else break;elseprintfc-xn输入非法,学号必须是4位,按任意键后重新输入:n”); getch();system(ncls");print”姓名:”);scanf("%sm,current->n ame);printfc成绩:");scanf("%lf&cun

48、'ent>score);printf("=nnm);while(l)printfc谓选择:nl.继续增加学生n2.退出到主页面n“);sz=getch();if(sz=' 1 l|sz='2')break;printf(”输入有误,按任意键重新选择! n");systcm("cls");gctch();total+;systemc'cls1*);cuitent->next=null;sort(head,current);current二null;if(sz二二2) break; void edit_st

49、udent(student *head)struct student *pre;char temp10;int sz=0,is_e=0;if(head->next=null)printf(h信息表为空,请按任意键返回主页面”); getch();system(” cis");return ; while(l)while(l)printfc1请输入要编辑的学生学号:(如果不执行操作请输入0000) n学号:”); scanf(” s",temp);if(strcmp(contrast,temp)=0)system(hclsn);return;pre=head->n

50、ext;while(pre&&strcmp(pre >nu mber,temp)!=0)pre=pre->next;if(pre)break;elseprintf(mn学号为s的学生不存在,请按任意键后重新输入.n”,temp); getch();system(hclsn);while(l)flag:printf("学号为s的学生信息如下:nu,pre->number);printf("学号:%sn 姓名:%sn 分数:%.2fnh,pre->number,pre->name,pre->score);printf(,=nn

51、m);printfc'iw选择修改项目:nl.姓名n2.分数n3.不进行操作,回到主页面n“); sz=getch();switch(sz)case 'l':printf("输入新的姓名:,);scanf(',%s",pre->name);break;case 2:printf(”输入新的分数:u);scanf("%lf*,&pre->score);break;if(sz!=4 &&sz!二 2)if(sz=,3,)systemc'cls");return;printf(m输入有

52、误,按任意键重新选择! nu);getch();system("cls");goto flag;system(” cis");printf(h=n"); printfc*新的学生信息:n学号:%sn 姓名:%sn 分 数:%.2fnh,pre->number,pre->name,pre>score);printf(n=nn);while(l)printf(h请选择:nl.重新修改本条学生信息52.继续修改其他学生信息n3. 退出修改,回到主页面n”);is_e=getch();if(is_e=,r|is_e=,2,|is_e=,3

53、9;) break;else printff'输入有误,按任意键重新选择! n',);getch();system("clsn);if(is_e=,2,|is_e='3,) break;system(” cis");system("clsh);if(is_e=,3') break;void query_student(student *head)struct student * pre;char tempi 1();int sz;if(head->next=null)pintf(”信息表为空,请按任意键返回主页面 getch(

54、);system(” cis");return ; while(l)whilc(l)pre=head->next;printfc*请输入要查询的学生学号n学号:“);scanf("%s",temp);if(strcmp(contrast,temp)=0)system(hclsn);return;while(pre&&strcmp(pre->number,temp)!=o)pre=pre->next;if(pre) break;elseprintf(”学号为s的学生不存在,请按任意键后重新输入.”,temp); getch();systemc'cls*

温馨提示

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

评论

0/150

提交评论