c语言程序综合实验111报告报告+综合实验一.docx
《c语言程序综合实验111报告报告+综合实验一.docx》由会员分享,可在线阅读,更多相关《c语言程序综合实验111报告报告+综合实验一.docx(70页珍藏版)》请在冰点文库上搜索。
c语言程序综合实验111报告报告+综合实验一
程序设计综合实验
(课程代码0474002)
实验地点:
X
实验学期:
第x学期
学生班级:
学生学号:
学生姓名:
任课教师:
信息科学与技术学院
2013年3月
实验一:
ATM机用户操作界面及业务逻辑编写
●实验目的及内容
根据ATM的工作流程编写用户界面,掌握文本用户菜单的编写方法。
根据ATM的工作流程编写其业务逻辑,掌握搭建一个完整应用系统的方法及软件编程思想。
●实验要求
(1)除提示用户输入的数字外,界面上不能响应、出现任何其它用户输入;
(2)每个菜单界面独立显示,不要出现多组菜单重叠显示的现象;
务逻辑可以多次执行,直到用户选择退出业务;
(3)用户选择一种语言后,进入主业务界面。
下面以以中文界面为例介绍其它业务。
●实验步骤及核心代码
反复执行,知道用户选择退出。
switch(f)
{case'1':
{denghao();
printf("此账户有¥%.2f元\n",x);
printf("请按任意键继续\n");
denghao();
getch();
};break;
case'2':
{
denghao();
printf("输入您要存入的数目:
¥");
scanf("%f",&y);
printf("\n按任意键继续\n");
denghao();
x=x+y;
getch();
};break;
case'3':
{denghao();
printf("输入您要取钱的数目:
¥");
scanf("%f",&z);
while(z>x)
{denghao();
printf("\n余额不足,按任意键后重新输入!
\n");
denghao();
getch();
system("cls");
printf("输入您要取钱的数目:
¥");
scanf("%f",&z);
}
if(z<=x)
{printf("\n按任意键继续\n");
x=x-z;
denghao();
getch();
}
};break;
}
if(f=='4')
{system("cls");
break;
}
}
实验二:
机制转换器
●实验目的及内容
写一个“计算器”程序,实现十进制、二进制、十六进制的相互转换。
●实验要求
(1)转换要求包括整数和小数;
(2)提供清晰、友好的用户界面;
(3)各种转换可以重复多次执行,知道用户选择“退出”按钮。
●实验步骤及核心代码
while
(1)
{boolflag=true;
system("cls");
printf("inputa十进制数字\n");
charshit[80];
gets(shit);
sprintf(shit,"%lf",cheat);
n=strlen(shit);
for(i=0;i{if((shit[i]<'0'||shit[i]>'9')&&shit[i]!
='.')
{flag=false;
printf("Inputerror!
\n");
break;
}
}
intm=-1;
for(i=0;i{if(shit[i]=='.')
m=m+1;
if(m>=1)
{printf("Inputerror!
");
flag=false;
break;
}
}
if(flag==true)
{
break;
}
}
shier(x);
system("cls");
}
break;
case'2':
{system("cls");
printf("inputa十进制数字:
\n");
scanf("%lf",&x);
shishiliu(x);
system("cls");
}break;
case'3':
{system("cls");
printf("inputa二进制数字:
\n");
scanf("%s",ch);
printf("得到十进制为:
\n");
printf("");
printf("%.64g\n",ershi(ch));
getch();
system("cls");
}break;
case'4':
{system("cls");
printf("inputa二进制数字:
\n");
scanf("%s",ch);
ershiliu(ch);system("cls");
}break;
case'5':
{system("cls");
printf("inputa十六进制数字:
\n");
scanf("%s",ch);
printf("得到十进制为:
\n");
printf("");
printf("%.64g\n",shiliushi(ch));
printf("\n");
getch();
system("cls");
}break;
case'6':
{system("cls");
printf("inputa十六进制数字:
\n");
scanf("%s",ch);
shiliuer(ch);
system("cls");
}break;
case'7':
{system("cls");
printf("\n");
bExit=1;
}break;
default:
system("cls");
printf("Inputerror!
\n");
getch();
system("cls");
break;
}
}
实验三:
随机数生成及抽奖
●实验目的及内容
用均匀分布随机数生成随机数。
根据随机数编写一个抽奖程序。
●实验要求
(1)据用户的输入,控制随机数生成的数目,随机数用动态数组保存;
(2)用户的输入,控制随机数的范围:
比如能够生成一组【a,b】范围内的随机数。
●实验步骤及核心代码
printf("Inputthetotalnumberofthepeople:
");
scanf("%d",&n);
printf("=======================================\n");
printf("Informationofall:
\n");
srand((int)time(0));
for(i=1;i<=n;i++)
a[i]=rand()%100;
for(i=1;i<=n;i++)
printf("%d:
p%d,hisnumberis%d\n",i,i-1,a[i]);
printf("\nPressanykeytodrawlottry....\n\n\n");
k=rand()%100;
m=1;
for(i=1;i<=n;i++)
if(a[i]==k)
{printf("Thewinneris:
p%d,hisnumberis%d\n",i-1,k);
printf("Ihevalidlottrynumberis:
%d\n",k);
m=0;
}
while(m==1){
printf("Iheinvalidlottrynumberis:
%d\n",k);
k=rand()%100;
for(i=1;i<=n;i++)
if(a[i]==k)
{
printf("Thewinneris:
p%d,hisnumberis%d\n",i-1,k);
printf("Ihevalidlottrynumberis:
%d\n",k);
m=0;
}
}
实验四:
插入排序和快速排序
●实验目的及内容
生成一组随机整,对该组数据进行排序,采用插入排序法。
生成一组随机整,对该组数据进行排序,采用快速排序法。
●实验要求
(1)数组的长度由用户输入;
(2)随机数范围在【100,1000】范围内;
(3)采用直接插入和普通快速排序法;
(4)根据用户要求,可以实现增序、降序两种排序。
●实验步骤及核心代码
插入升序:
voidfun1(inta[],intn)
{
inti,j,x;
for(j=0;j{x=a[j];
i=j-1;
while(i>=0&&a[i]>x){
a[i+1]=a[i];
i--;
}
a[i+1]=x;
}
for(j=0;jprintf("%d",a[j]);
printf("\n");
}
插入降序:
voidfun2(inta[],intn)
{
inti,j,x;
for(j=0;j{x=a[j];
i=j-1;
while(i>=0&&a[i]a[i+1]=a[i];
i--;
}
a[i+1]=x;
}
for(j=0;jprintf("%d",a[j]);
printf("\n");
}
快速升序:
voidfun3(inta[],intn)
{inti,j,p,x,t;
i=0;
j=n+1;
x=a[i];
while
(1){
while(i<=n&&a[++i]while(j>=0&&a[--j]>x);
if(i>=j)break;
t=a[i];a[i]=a[j];a[j]=t;
}
for(p=i;a[p]<=x&&p<=n;p++);
p--;
a[0]=a[p];
a[p]=x;
for(j=0;jprintf("%d",a[i]);
printf("\n");
}
快速将序:
voidfun4(inta[],intn)
{inti,j,p,x,t;
i=0;
j=n+1;
x=a[i];
while
(1){
while(i<=n&&a[++i]>x);
while(j>=0&&a[--j]if(i>=j)break;
t=a[i];a[i]=a[j];a[j]=t;
}
for(p=i;a[p]<=x&&p<=n;p++);
p--;
a[0]=a[p];
a[p]=x;
for(j=0;jprintf("%d",a[i]);
printf("\n");}
实验六:
学生信息数据结构及小型管理信息系统
●实验目的及内容
采用单链表实现对一组学生信息的组织。
完成一个小型学生管理信息系统,实现除存储意外其他基本的信息管理功能。
●实验要求
(1)编写友好的用户界面;
(2)采用带头节点的单链表实现对数据的组织,不允许使用数组;
(3)学生信息必须包括如下三项:
Ø学号(4位编号,如0101,所有学生学号长度一致)
Ø姓名
Ø成绩
(4)功能要求:
Ø添加学生:
提示用户输入信息,添加一个学生信息(学号长度进行检查)。
Ø总人数显示。
Ø打印:
按顺序在屏幕上打印所有学生的信息。
(5)链表中的数据有序排列:
要求根据学号升序排列。
(6)添加如下功能:
Ø删除:
a.根据学号删除任意学生信息;b.删除所有学生信息。
要求删除成功与否都需要打印相印的提示信息,如“学号为****的学生删除成功”,“学号为****的学生不存在,删除失败”等。
Ø查询:
根据学好查询任意学生,并将信息打印在屏幕上。
Ø编辑:
修改任意一个学生除学号意外的信息,如姓名、成绩等。
●实验步骤及核心代码
voidPrintAll(list*h)//打印
{system("cls");
list*p=h->next;
inti;
printf("======================\n");
printf("所有学生信息:
\n");
for(i=1;p!
=NULL;i++)
{
printf("%d:
%s%s%f\n",i,p->ID,p->name,p->score);
p=p->next;
}
getch();
}
voidPrintCnt()//打印总人数
{
system("cls");
printf("======================\n");
printf("学生总人数:
%d\n",n);
printf("======================\n");
getch();
}
voidAdd(list*h)//添加
{
system("cls");
list*p,*p1=h,*p2=h;
intk=1;
p2=p2->next;
printf("======================\n");
printf("输入学生信息:
\n");
p=(list*)malloc(sizeof(list));
printf("学号:
");
scanf("%s",p->ID);
while(strlen(p->ID)!
=4){
printf("输入非法,学号必须是四位数,请重新输入!
\n");
printf("学号:
");
scanf("%s",p->ID);
}
printf("姓名:
");
scanf("%s",p->name);
printf("分数:
");
scanf("%s",&p->score);
printf("\n");
while(p1->next!
=NULL)
{
if(atol(p2->ID)>atol(p->ID))
{p1->next=p;
p->next=p2;
k=0;
break;
}
p1=p2;p2=p2->next;
}
if(k)
p1->next=p;
p->next=NULL;
n++;
}
voidSearch(list*h)//查找
{
list*p;
charin_ID[4];
intk=1;
while(k)
{
p=h;
system("cls");
printf("======================\n");
printf("请输入要查找学生的学号:
\n");
printf("学号:
");
scanf("%s",&in_ID);
for(;p!
=NULL;)
{if(strcmp(p->ID,in_ID)==0)
{printf("学号为%s的学生信息:
姓名%s,分数%f\n",in_ID,p->name,p->score);
k=0;
break;
}
p=p->next;
}
if(k)
{printf("找不到学号为%s的学生,请重新输入!
\n",in_ID);}
getch();
}
getch();
}
voidEdit(list*h)//编辑
{
list*p;
charin_ID[4],i;
intk=1;
while(k)
{
p=h;
system("cls");
printf("======================\n");
printf("请输入要查找学生的学号:
\n");
printf("学号:
");
scanf("%s",in_ID);
for(;p!
=NULL;)
{
if(strcmp(p->ID,in_ID)==0)
{
printf("学号为%s的学生信息:
姓名%s,分数%f\n",in_ID,p->name,p->score);
k=0;
break;
}
p=p->next;
}
if(k)
{
printf("找不到学号为%s的学生,请重新输入!
\n",in_ID);
getch();
}
}
printf("请选择修改项目:
\n");
printf("1:
姓名\n");
printf("2:
分数\n");
i=getch();
if(i=='1')
{printf("请输入姓名:
");
scanf("%s",p->name);
}
else
{
printf("请输入分数:
");
scanf("%f",&p->score);
}
getch();
}
voidDelete(list*h)//删除
{
charin_ID[4];
list*p=h,*p1;
intk=1;
while(k)
{
p1=p=h;
system("cls");
PrintAll(h);
printf("======================\n");
printf("输入要删除学生的学号:
(如果删除所有学生请输入0000)\n");
printf("学号:
");
scanf("%s",in_ID);
if(strcmp(in_ID,"0000")==0)
{
h->next=NULL;
return;
}
for(;p!
=NULL;)
{
if(strcmp(p->ID,in_ID)==0)
{
printf("学号为%s的学生信息:
姓名%s,分数%f\n",in_ID,p->name,p->score);
k=0;
break;
}
p1=p;
p=p->next;
}
if(k)
{
printf("找不到学号为%s的学生,请重新输入!
\n",in_ID);
getch();
}
}
p1->next=p->next;
n--;
}
实验七:
文本文件和二进制文件格式的保存、读取
●实验目的及内容
采用文本文件进行数据的存储和读取。
采用二进制文件进行数据的存储和读取。
●实验要求
(1)用文本(字符)文件格式进行数据的保存和读取;
(2)文件的存储路径,提示用户输入;
(3)存盘成功或者失败,输出提示信息;
(4)数据读入后能够修改、保存。
(5)修改存盘及数据存储函数,添加用二进制文件实现数据的保存与读取功能;
●实验步骤及核心代码
voidsave1(list*h)//保存文件
{
FILE*fp;
list*p=h->next;
charname[20];
printf("输入文件名:
\n");
scanf("%s",name);
if((fp=fopen(name,"w"))==NULL)
{
printf("存盘失败!
\n");
return;
}
else
printf("数据已经成功保存到%s\n",name);
while(p!
=NULL)
{
fprintf(fp,"%s%s%.2f\n",p->ID,p->name,p->score);
p=p->next;
}
fclose(fp);
getch();
}
voidread1(list*h)//读取文件
{
FILE*fp;
list*p,*p1=h;
charch,name[20];
printf("输入文件名:
\n");
scanf("%s",name);
i