信息管理与系统开发综合模拟实习文档格式.docx
《信息管理与系统开发综合模拟实习文档格式.docx》由会员分享,可在线阅读,更多相关《信息管理与系统开发综合模拟实习文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
5.学生成绩管理系统
学生成绩管理系统。
该系统中存储学生的学号、姓名、性别、年龄、课程成绩等信息。
要求:
1)浏览学生信息
2)添加学生信息
3)删除学生信息
4)查找学生信息
5)修改学生信息
6)对成绩的处理
①求出每个学生各门课程的总成绩、平均成绩、最高分和最低分。
②求出某一门课程所有学生的总成绩、平均成绩、最高分和最低分。
7)按照学生某门课程的成绩对学生排序
四、算法分析、设计与描述
1.算法分析和设计
1.1利润提成计算问题
定义多个变量表示利润在不同范围内的固定奖金
1.2简单的超市计价问题
定义一个变量d,计算实际收款与付款项的差。
如果d大于0,则d为应找的零钱,如何d等于0,则表示,实际收款正好为应付款数额。
如果d小于零,则表示顾客还需要再付款。
1.3年龄计算问题
定义一个结构体,将年,月,日3个变量封装在这个结构体里面。
再定义3个函数分别实现其年龄的计算,总天数的计算,及其两个日期分别是该年的第几天的计算。
voidcount_years(structdatesinfo,structdatesinfo1)
voidcount_total(structdatesinfo,structdatesinfo1)
voidtotal_years(structdatesinfo,structdatesinfo1)
1.4组合问题
找出n个自然数中r个数的组合,即输入n个自然数,从这些数中挑选出r个数字,进行组合且组合的数字不能重复。
利用一个递归函数实现此功能。
1.5学生成绩管理系统
设计学生成绩管理系统,该系统存储学生的学号、姓名、性别、年龄、课程成绩。
可定义一个结构体来定义上述变量,把这些数据封装在这个结构里面。
系统需要实现的功能有:
学生信息的添加、删除学生的信息、查找学生的信息、修改学生的信息、对学生成绩的处理。
可以定义如下函数分别实现上面不同的功能。
1)浏览学生成绩brose(FILE*fp)
2)添加学生成绩add(FILE*fp)
3)删除学生成绩FILE*deletes(FILE*fp,char*fnames)
4)查找学生成绩research_show(FILE*fp)
5)修改学生成绩FILE*revise(FILE*fp,char*fnames)
6)对成绩的处理voiddeal_result(FILE*fp)
2.算法描述
2.1利润提成计算问题
2.2简单的超市计价问题
2.3年龄计算问题
2.4组合问题
从n然数中,第一位取n,第二位去n-1,第三位n-2…第r位去n-r+1。
第一步第前n-r+2数位保持不变,最后一位依次在n-2的基础上减去1与前面的数进行组合.第二步对倒数第二位减去一,再进行第一步的操作.每一位数减一后,重复及前一步的操作
2.5学生成绩管理
五、程序设计
1程序设计的基本思路
1.1利润计价问题
利润10万到20万之间,其固定奖金为sum1=10000*0.1
利润20万到40万之间,其固定奖金为sum2=sum1+100000*0.075
利润40万到60万之间,其固定奖金为sum4=sum2+200000*0.05
利润60万到100万之间,其固定奖金为sum6=sum4+200000*0.03
利润大于100万时,其固定奖金为sum10=sum6+400000*0.015
利用一个swith语句算出对应的奖金金额
1.2简单超市计价问题
面向过程的方法,自顶向下的思路设计此题
利用结构体封装年,月,日数据。
代码如下:
struct
dates{
int
years;
months;
date;
};
设计三个函数分别实现其年龄的计算,总天数的计算,及两个日期分别是该年第几天的计算。
函数的形参变量设计为结构体变量通过结构体变量很方便进行数据操纵,简化计算的的途径。
1.4背包问题
设计函数voidcomb(intm,intk)从组合数的最后一位数变化,再过度到倒数第二位,直到第一位数。
代码如下
voidcomb(intm,intk){
inti,j;
for(i=m;
i>
=k;
i--){
a[k]=i;
if(k>
1)
comb(i-1,k-1);
else
for(j=a[0];
j>
0;
j--)
cout<
<
a[j]<
"
\t"
;
endl;
}}}
1.5学生成绩管理系统
声明函数9个函数
voidadd(FILE*fp);
voidclean();
voidsextrue(char*sa);
voidbrose(FILE*fp);
voidcheck_ID(FILE*fp,long*sa);
voidresearch_show(FILE*fp);
voiddeal_result(FILE*fp);
FILE*revise(FILE*fp,char*fnames);
FILE*deletes(FILE*fp,char*fnames);
利用结构体structstudent用不同的类型定义学生基本信息表达的变量。
利用switch语句选择实现对应的7个功能
switch(choice){
case1:
brose(fp);
break;
case2:
add(fp);
case3:
fp=deletes(fp,name);
case4:
research_show(fp);
case5:
fp=revise(fp,name);
case6:
deal_result(fp);
case7:
exit
(1);
}
定义6个函数,分别实现学生信息的游览,学生信息的添加、删除学生信息、查找学生信息、修改学生信息、对学生成绩的处理。
另定义二个函数,一voidcheck_ID(FILE*fp,long*sa)用来检测增加的用户名是否重复,二voidsextrue(char*sa)用来控制输入的性别字符是否是男或女。
2.程序代码
#include<
stdio.h>
intmain(void)
{
longi;
floatsum,sum1,sum2,sum4,sum6,sum10;
sum1=100000*0.1;
sum2=sum1+100000*0.75;
sum4=sum2+200000*0.5;
sum6=sum4+200000*0.3;
sum10=sum6+400000*0.15;
printf("
请输入您要利润[Enter]确认:
);
while(scanf("
%ld"
&
i)==1)
{
switch(i/100000)
case0:
case1:
sum=sum1+(i-100000)*0.075;
case2:
case3:
sum=sum2+(i-200000)*0.05;
case4:
case5:
sum=sum4+(i-400000)*0.03;
case6:
case7:
case8:
case9:
sum=sum6+(i-600000)*0.015;
default:
sum=sum10+(i-1000000)*0.01;
}
您这个月的奖金为:
%.2f\n"
sum);
请输入下一个员工的利润计算奖金[Enter]确认:
2.2简单超市计价问题
#include<
iostream>
cmath>
usingnamespacestd;
intmain()
doublea,b,c,d;
cout<
输入单价:
cin>
>
a;
输入数量:
b;
输入已付的款额:
c;
d=c-a*b;
if(d>
0)
需要找回"
d<
元!
elseif(d==0)
付款不用找钱!
else
付款金额不足,还需付款"
fabs(d)<
元"
return0;
voidcount_years(structdatesinfo,structdatesinfo1);
voidcount_total(structdatesinfo,structdatesinfo1);
voidtotal_years(structdatesinfo,structdatesinfo1);
intfate[12]={31,28,31,30,31,30,31,31,30,31,30,31};
structdates{
intyears;
intmonths;
intdate;
structdatesfirst;
structdateslast;
printf("
请输入您的生日(例如1992.6.2):
scanf("
%d.%d.%d"
first.years,&
first.months,&
first.date);
请输入计算日期(例如1992.6.2):
last.years,&
last.months,&
last.date);
count_years(first,last);
count_total(first,last);
total_years(first,last);
return0;
intcount;
count=info1.years-info.years;
if(info1.months>
info.months);
elseif(info1.months<
info.months)
count--;
if(info1.date>
info.date);
elseif(info1.date<
info.date)
您在%d.%d.%d的时候%d岁!
\n"
info1.years,info1.months,info1.date,count);
intdate1,year,total=0,i,n,date2;
year=info1.years-info.years;
elseif(info1.months=info.months)
=info.date)
year=info1.years-info.years-1;
for(i=0;
i<
info.months;
i++)
date1+=fate[i];
date1=365-date1;
for(n=0;
n<
n++)
date2+=fate[n];
total=year*365+date1+date2;
两个日期之间一共%d天!
total);
inti,n,date1=0,date2=0;
info1.months;
%d.%d.%d在当年的第%d天,%d.%d.%d在当年的第%d天!
info.years,info.months,info.date,date1,info1.years,info1.months,info1.date,date2);
inta[100];
//全局变量
voidcomb(intm,intk)
inti,j;
for(i=m;
i--)
a[k]=i;
if(k>
comb(i-1,k-1);
else
{
for(j=a[0];
cout<
cout<
}
voidmain()
intn,r;
Pleaseinputthenumbernandr:
n>
r;
if(r>
n)
cout<
Inputn,rerror!
a[0]=r;
comb(n,r);
//递归过程
stdlib.h>
string.h>
#defineSIZE200
charname[SIZE];
structstudens{
charname[SIZE];
longID;
charsex[SIZE];
intyears;
floatresult;
structstudensnews[SIZE];
charnam[SIZE];
intchoice;
staticn;
FILE*fp;
请输入文件名:
gets(name);
if((fp=fopen(name,"
a+"
))==NULL)//检测是否成功打开
fprintf(stderr,"
打开文件%s失败!
name);
exit
(1);
rewind(fp);
//将文件指针移到文件开头
fgets(nam,4,fp);
if(strstr(nam,"
姓名"
)==NULL)//检测文件开头部分是否有姓名、学号等等标题,没有就将其输入到文件,有则不用在输入
fputs("
姓名学号性别年龄成绩\n"
fp);
n=0;
1:
浏览学生信息2:
添加学生信息\n"
3:
删除学生信息4:
查找学生信息\n"
5:
修改学生信息6:
对成绩的处理\n"
7:
退出程序\n"
scanf("
%d"
choice);
while
(1)
if(choice<
1||choice>
7)
clean();
printf("
请输入1-7之间的数:
scanf("
switch(choice)
case1:
brose(fp);
break;
case2:
add(fp);
case3:
fp=deletes(fp,name);
case4:
research_show(fp);
case5:
fp=revise(fp,name);
case7:
exit
(1);
fclose(fp);
printf("
scanf("
fclose(fp);
voidadd(FILE*fp)
intn=0,l=0;
charas[SIZE];
while(fgets(as,SIZE,fp)!
=NULL)//作用是使新输入的信息接着以前的
l++;
输入q退出输入!
请输入学生的姓名:
%s"
news[n].name);
while(n<
SIZE&
&
news[n].name[0]!
='
q'
)//通过输入q来推出循环
请输入学号:
news[n].ID);
check_ID(fp,&
clean();
请输入性别:
news[n].sex);
sextrue(news[n].sex);
//检测是否输入的是男或者女
请输入年龄:
news[n].years);
请输入成绩:
%f"
news[n].result);
fprintf(fp,"
%d.%-15s%-15ld%-15s%-15d%-3.2f\n"
l,news[n].name,news[n].ID,news[n].sex,news[n].years,news[n].result);
n++;
voidbrose(FILE*fp)//输出文件中的内容
chartitle2[SIZE];
while(fgets(title2,SIZE,fp)!
=NULL)
fputs(title2,stdout);
voidclean()//清除错误输入
while(getchar()!
\n'
)
continue;
voidsextrue(char*sa)
while(strcmp("
男"
sa)&
strcmp("
女"
sa))
请输入男或女:
sa);
voidcheck_ID(FILE*fp,long*sa)
intn=0,i=1,x;
chartemp[SIZE];
structstudenscheck;
fgets(temp,SIZE,fp);
while(!
feof(fp))
fscanf(fp,"
%d.%s%ld%s%d%f\n"
x,check.name,&
check.ID,check.sex,&
check.years,&
check.result);
if(check.ID==*sa)
请重新输入:
rewind(fp);
fgets(temp,SIZE,fp);
FILE*deletes(FILE*fp,char*fnames)//删除函数
structstudensmany;
intyes=1;
intn=1;
intx;
FILE*fq;
//存储文件中的内容
charnames[SIZE];
请输入要删除的姓名: