您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页高宇 电气091 学号09570114 ...

高宇 电气091 学号09570114 ...

来源:化拓教育网


C语言综合实验报告

1.实验名称:学生成绩管理系统 2.班级:电气信息类091 3.学号:09570114 4.姓名:高宇 5.指导老师:林巧

1.实验内容

1-1.实验名称:学生成绩管理系统。 1-2.实验目的:

1) 利用所学的三种程序基本结构以及数组、用户自定义函数

进行一个简单系统的设计,进一步理解和掌握C语言的语法以及三种基本结构的综合应用。

2) 通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。

1-3.实验要求:

A.实验基本功能要求

设某班有n位同学,每位同学的数据包括以下内容:学号(长整型或字符串型)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。 注意:

1) 输入数据时,要求学号不能相同,姓名可以相同。 2) 在学习“结构体”和“文件”之前也可以进行本项程序设计,

采用多个数组存储数据,同一学生信息对应的数组元素下标相同。

B.实验具体设计要求

(一).程序运行时,首先显示主菜单如下:

1.新建数据 2.添加数据 3.删除数据 4.排序 5.查询 6.退出

屏幕提示:请输入序号选择相应操作。

要求当用户输入任意序号后,程序都能进行相应操作。 (二). 在主菜单中选择序号4,弹出子菜单选择排序方

式,子菜单如下:

1.数学成绩排序 2.程序设计成绩排序 3.总分排序 4.返回主菜单

请按序号选择相应操作。

选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。

(三).在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:

1.学号查询 2.姓名查询 3.数学成绩查询

4.程序设计成绩查询 5.总分查询 6.返回主菜单

请按序号选择相应操作。

在子菜单中选择序号后,程序按以下方式运行:

1).学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)

2).姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)

3).按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;

4).总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数;

2.算法说明

Menu

S2.若cho1=1,则执行ned。 若cho1=2,则执行add 若cho1=3,则执行del 若cho1=4,则执行arr1 若cho1=5,则执行see

S1.输入cho1选择相应的操作。

若cho1=6,则输出“欢迎使用本程序!再见!”。 否则输出“请输入屏幕中所显示的序号”

Ned

S8.输入n,确定新建数据个数。执行data S9执行printe S10.执行menu Add

S11.输入m确定添加数据的个数。执行data. S12.执行printe S13.执行menu. Del

S14.输入要删除的学号。

S15.如果y=1,输出“已成功删除您所要求的学生”, 如果y=0,输出“不存在该学生”。

S16.执行printe S17执行nenu Arr1

S18输入cho2,选择相应操作。 S19若cho2=1或2或3,执行arr2, 若cho2=4,执行menu,

否则输出“请输入屏幕中所显示的学号”

Arr2

S20进行排序。 S21执行printe S22执行arr1 See

S24输入cho3,选择相应的序号。 S25若cho3=1或2,执行ch1, 若cho3=3或4或5,执行ch2, 若cho3=6,执行menu,

否则输出“请输入屏幕中所显示的序号”

Ch1

S26输出“请输入您要查询的人数”,输入k, S27输入学号或姓名。

S28若该学生学号和姓名存在则输出与其相关的所有信息,否则输出“不存在该学生”

S29执行see Ch2

S30输出“请输入您要查询的分数”

程序运行后显示该科目中考试成绩大于等于指定分数的同

学的学号、姓名以及该科成绩并统计满足条件的人数;

S31执行see Data

S32请输入学号 S33 a2=0

S34如果该学号已出现,输出“该学号已出现,请您重新输入”,

a2=1,执行S32。 否则,执行S35。 S35 输入姓名 S36输入数学成绩 S37输入程序设计成绩 Printe

S38执行zhuan S39输出结构体 Zhuan

S40把结构体转换为数组

3.程序清单

#include

#include #include #define M 50 #define R printf #define F scanf

#define N \"\\n\"

int n=0; /*存放新建的数据个数*/ int m=0; /*存放添加的数据个数*/ int w; /*存放总的数据个数*/ struct student {

char num[4]; char nam[4]; int mat;

int pro; int sum;

}stu[M],temp;

void menu(); /*主菜单*/ void ned(); /*新建数据*/ {

void add(); /*添加数据*/ void del(); /*删除数据*/

void zhuan(); /*转换*/ void arr1(); /*排序*/ void see(); /*查找*/

void data(int k,int q); /*新建和添加数据时用来输入输出数据*/

void arr2(int f[]); /*分别在data和arr1中担当排序程序*/

void print(int k); /*在arr2、ned、add、和del中担当输出数据*/ void ch1(char f[][4],char g[100]);

void ch2(int f[100],char g[100]); /*查找的子程序*/

void main()

menu();

}

void menu() { int cho1;

R(N\"\\\****************************************\"N); R(N\"\\\* 欢迎进入学生成绩管理系统 *\"N); R(N\"\\\* 1.新建数据 *\"N); R(N\"\\\* 2.添加数据 *\"N); R(N\"\\\* 3.删除数据 *\"N); R(N\"\\\* 4.排序 *\"N); R(N\"\\\* 5.查询 *\"N); R(N\"\\\* 6.退出 *\"N);

R(N\"\\\****************************************\"N); R(N\"请输入序号选择相应的操作:\");

while(1) { F(\"%d\ switch(cho1)

{ case 1: ned();break; case 2: add();break; case 3: del();break; case 4: arr1();break;

case 5: see();break;

case 6: R(\"欢迎使用本程序!再见!\"N);break;

default: R(N\"!!!!!!!!!!!!!!!!!!请输入屏幕中所显示的序号:\");continue;

} break; }system(\"cls\");

}

void ned()

{ system(\"cls\"); R(N\"请输入新建数据的个数:\"); }

F(\"%d\data(n,0); system(\"cls\"); print(n); w=m+n; menu();

void add() { }

system(\"cls\");

R(N\"请输入添加数据的个数;\"); F(\"%d\ w=m+n; data(n+m,n); system(\"cls\"); print(n+m); menu();

char a[50][4],b[50][4];int c[50],d[50],e[50]; void zhuan() {

int i,j;

for(i=0;ifor(j=0;j<4;j++) {

}

a[i][j]=stu[i].num[j]; b[i][j]=stu[i].nam[j]; }

c[i]=stu[i].mat; d[i]=stu[i].pro; e[i]=stu[i].sum;

}

void del()

{ int h,i,j,y;char f[4];

w=m+n;

system(\"cls\"); R(N\"请输入要删除的学号(三位数字):\"N); F(\"%s\ for(j=0;jif(strcmp(stu[j].num,f)==0) { if(i==(w-1))

{

w--;y=1;break;

} else {

for(h=j;h} } }

if(y==1) R(N\"已成功删除您所要求的学生%s\"N,f); else R(N\"!!!!!!!!!!!!!!不存在学生%s\"N,f);

n=w; print(w); menu();

void arr1() { int cho2;

R(\"\\\-------------------------------\"N);

R(\"\\\- 排序 -\"N); R(\"\\\- 1.数学成绩排序 -\"N); R(\"\\\- 2.程序设计成绩排序 -\"N); R(\"\\\- 3.总分排序 -\"N);

R(\"\\\- 4.返回主菜单 -\"N); R(\"\\\-------------------------------\"N); R(N\"请按序号选择相应的操作\");

while(1) { F(\"%d\

switch(cho2) {

case 1: arr2(c);break; case 2: arr2(d);break; case 3: arr2(e);break;

case 4: menu();break;

default: R(N\"!!!!!!!!!!!!!!!!!!请输入屏幕中所显示的序号:\"N);continue;

}

}break;

}

void see()

{ int cho3; char f[5][100]={{\"学号\姓名\数学成绩\程序设计成绩\总分\

R(\"\\\------------------------------------\"N);

R(\"\\\- 查询 -\"N); R(\"\\\- 1.学号查询 -\"N); R(\"\\\- R(\"\\\- R(\"\\\- R(\"\\\-

2.姓名查询 3.数学成绩查询 5.总分查询 6.返回主菜单

-\"N); -\"N); -\"N); -\"N);

R(\"\\\------------------------------------\"N); R(\"请按序号选择相应的操作:\"); while(1) { F(\"%d\ }

switch(cho3) {

case 1: ch1(a,f[0]);break; case 2: ch1(b,f[1]);break;

case 3: ch2(c,f[2]);break; case 4: ch2(d,f[3]);break; case 5: ch2(e,f[4]);break;

case 6: menu();break;

default: R(N\"!!!!!!!!!!!!请输入屏幕中所显示的序号:\"N);continue;

}break;

}

void data(int k,int q) {

int t,i,j,a2;

for(i=q;i{ R(\"=====================================================================\"N);

do

{

R(N\"请输入 第%d个学生的 学号 :\ a2=0;

F(\"%s\for(j=i-1;j>=0;j--) {

if(strcmp(stu[i].num,stu[j].num)==0) {R(N\"!!!!!!!!!!!该学号已出现,请您重新输入:\"N);a2=1; break;}

}

}while(a2);

R(\"请输入 第%d个学生的 姓名 :\ F(\"%s\ R(\"请输入 第%d个学生的 数学成绩 :\ F(\"%d\ R(\"请输入 第%d个学生的 程序设计成绩:\ F(\"%d\ }R(\"=====================================================================\"N); }

void arr2(int f[50]) { system(\"cls\"); int i,j,p,t;

for(i=0;ifor(j=i+1;jf[j]) p=j; t=f[p];f[p]=f[i];f[i]=t; }

temp=stu[p];stu[p]=stu[i];stu[i]=temp;

print(w); arr1(); }

void print(int k) {

int i,j;

R(N\"\/////////////////////////////////////////////////////////////\"N);

R(\"\学号 姓名 数学成绩 程序设计成绩 总分\"N); for(i=0;ifor(j=0;j<3;j++) {

}

a[i][j]=stu[i].num[j]; b[i][j]=stu[i].nam[j]; }

c[i]=stu[i].mat; d[i]=stu[i].pro; e[i]=stu[i].sum;

R(\"%11s%9s%10d%13d%15d\"N,stu[i].num,stu[i].nam,stu[i].mat,stu[i].pro, stu[i].sum=stu[i].mat+stu[i].pro);

R(\"\/////////////////////////////////////////////////////////////\"N);

}

void ch1(char f[][4],char g[100]) { system(\"cls\"); int i,j,p=0;char h[10]; R(\"请输入%s:\

F(\"%s\

for(i=0;iif(strcmp(h,f[i])==0)

{ p=1;

R(N\"\/////////////////////////////////////////////////////////////\"N);

R(\"\学号 姓名 数学成绩 程序设计成绩 总分\"N); R(\"%11s%9s%10d%13d%15d\"N,stu[i].num,stu[i].nam,stu[i].mat,stu[i].pro, stu[i].sum=stu[i].mat+stu[i].pro); R(\"\/////////////////////////////////////////////////////////////\"N); } } if(p==0) R(N\"!!!!!!!!!!!!!!!!!!!!!!!不存在%s同学\"N,h); }

see();

void ch2(int f[100],char g[100]) { system(\"cls\");

int i,t,p=0;

R(N\"请输入您要查询的分数:\"N);

F(\"%d\

R(\"\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\"N); R(\"\\\学号 姓名 %s\"N,g); for(i=0;i=t)

{

R(\"\\%11s%9s%8d\"N,stu[i].num,stu[i].nam,f[i]);

p++; }

R(\"\\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\"N);

}

R(N\"\**********大于或等于该分数的人数为:%4d*****************\"N,p);

see();

4.运行结果

5.分析与思考

完成这个程序花了我一个星期的时间。看过题目后,感觉思路很清晰,本以为很简单。但在写完程序后,在VC上运行后,出现n多个错误,实在不敢一一列举。仅列举几个大错误,那些小错误、小疏漏就不在这里丢人现眼了。呵呵!

第一个大错误就是函数定义问题。在未定义的函数之前,我调用了这个函数,结果编译时出现错误。

第二个就是函数的形参和实参类型不一致。 第三个就是数组下标越界。

第四个就是老是出现死循环,这个很要命。

第五个就是在VC理运行不过,但在c-free里能通过编译。就是 a[i]=stu[i].nam这条语句存在毛病。其中a[i]是二维数组a[10][10]的第i行,但在VC里编译时显示这里出现错误。问题的大概意思就是不能整行的赋值,于是我改成了a[i][j]=stu[i].nam[j],让它一个一个的赋值,结果编译通过了,当时真的很高兴。

此次通过系统的编写这个大程序,我感受颇多,我发现自己对C语言掌握还不熟,还不能达到熟能生巧的地步,一些基本的算法还很生,如选择排序法,删除等等。反正这一个星期确实给了我一个不小的教训。今后只有通过多看书,多编程来逐步提高自己的编程能力,路还很长,况且我已经比别人满了好多了,有一些同学高中时就已经逐步掌握了最基本的编程了,为了不落后,只能自己为自己加油了!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务