您好,欢迎来到年旅网。
搜索
您的当前位置:首页学生成绩管理系统C语言课程设计报告

学生成绩管理系统C语言课程设计报告

来源:年旅网
C语言课程设计

制作人: 学号: 指导老师:时间:

设 计 报 告 告

一、 设计内容和设计要求

1、 设计内容

题目:学生成绩管理系统设计

该系统包含20个学生姓名和成绩信息,可对成绩进行排序, 并实现由姓名查找成绩及由成绩查找姓名。

2、 设计要求

1)由键盘输入20个学生(姓名)的某门课程的学习成 绩60~99 分。 2 )将分数由低到高排序(用直接排序法和冒泡法),并显示学 生姓名和

对应的分数。

3) 用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)。 4 )* 对分搜索法检索某个学生的成绩(输入成绩,显示姓名)。

二、 设计思路

首先是要建立20个学生信息,即学生姓名和学生成绩, 使用子函数input输入,学生成绩使用一维数组,学生姓名 使用二维数组。然后分别定义四个子函数,即直接排序法、 冒泡排序法和线性查找法、对分查找法。在两个排序法中, 用字符串拷贝函数来实现姓名的交换,另外,在用成绩查找 姓名时,可以用直接查找,也可以用对分查找法,在这里我 两种方法都使用了。最后在主函数中来设计人机界面,用 switch函数来实现操作选择,对应的情况中就调用之前定义 的子函数来完成排序或查找。

三、程序设计流程图

1 、程序总体流程

开始

2 、直接排序法流程图

3、冒泡排序法流程图

4、线性搜索法

5、对分搜索法

四、程序设计中遇到的问题和解决方案

最开始编程时,直接排序和冒泡排序法中都是通过

swap函

数来实现成绩交换和姓名交换, 以达到排序目的,但在主函数中 调用时却调用不了,程序在排序时就不能正常运行, 我的解决方 案就是去掉swap函数,因为有可能有些函数的调用有条件, 这样改变之后,就不存在问题,可以正常排序。

另外一个问题就是姓名数组的交换问题, 这个之前是用中间 变量的方式实现交换,结果调试时显示非法,于是经过多次改变 和尝试,发现姓名用二维数组更不容易出现问题,

于是就将姓名

以达到最

设置为二维数组,然后用字符串拷贝函数来实现交换,

终排序的目的。这样解决之后,一方面可以使姓名不至于在 一个字符内,另外一个好处就是解决了排序过程中姓名交换的问 题。

五、源程序(含注释)及运行界面 1、源程序

#in clude #in clude

#in clude

#define NUM 20 void in put(i nt

a[],char b[][30])

/*

子函数 in put 输入 20 个学生姓

名*/

{

int i;

for(i=0;iprintf(\"

请输入第%d个学生的姓名:\

scan f(\"%s\

scan f(\"%d\if(a[i]>99||a[i]<60) {

成绩大于99或小于60则显示错误

prin tf(\"error!\\n\"); /*

*/

i=i-1;

}

}

}

void zhijie(i nt a[],char b[][30]) /*

{

int i,j,m in ,temp;char temp1[30]; for(i=0;imin=i;

for(j=i+1;jif(a[j]temp=a[j];

a[j]=a[mi n]; a[mi n]=temp; strcpy(temp1,b[j]);

/* */

字符串拷贝函数进行字符数组交换

printf(\"

请输入第%d个学生的成绩:\

strcpy(b[j],b[mi n]); strcpy(b[mi n],temp1);

直接排序法*/

printf(”

排序后的学生姓名和成绩为:\\n\");

for(i=0;iprin tf(\"%s,%d\\n\ }

void maopao(i nt a[],char b[][30]) /* {

int i,j,temp;

char temp1[30];

for(i=0;iif(a[j]>a[j+1]) {

temp=a[j]; a[j]=a[j+1];

a[j+1]=temp; strcpy(temp1,b[j]); strcpy(b[j],b[j+1]); strcpy(b[j+1],temp1);

}

printf(\"

排序后的学生姓名和成绩为:\\n\"); for(i=0;i<=NUM-1;i++)

prin tf(\"%s,%d\\n\

}

void xia n1(int a[],char b[][30]) /* {

char ch[30];i nt i,flag=0; scan f(\"%s\

for(i=0;i{

printf(\"该学生成绩为 %d\\n\

break;

}

if(flag==0)

{ prin tf(\"No foun d!\\n\");

}

} void xia n2(int a[],char b[][30]) /*

{

int i,flag=0;i nt k; printf(\" 请输入成绩:\");

scan f(\"%d\

冒泡排序法*/

线性查找,由姓名查找成绩由成绩查找姓名*/

*/

for(i=0;iif(k==a[i]) {

printf(” 该学生姓名为 %s成绩为%d\\n\

flag=1; break;

}

if(flag==0) {

prin tf(\"NO foun d!\\n\");

}

}

void duife n(int a[],char b[][30])

/*

序后)*/

{

int i,n ,m,k;

printf(\"

对分查找,请输入成绩:”);

scan f(\"%d\n=0;m=NUM-1;

if((ka[NUM-1]))

prin tf(\"error!\\n\");

while( n<=m) {

i=(n+m)/2; if(k==a[i])

{ printf(\"学生姓名为:%s,成绩为:%d\\n\

break; }

else

if(k>a[i])

n=i+1;

else

m=i-1;

} if((a[i]!=k)||( n> m)) prin tf(\"NO foun d!\\n\");

}

void main () /*

{

int x,t,score[NUM];char name[NUM][30];

printf(\" *************************************************************

printf(”

\\n\");

对分查找,由成绩查找姓名主函数及界面*/

**\\ n\")

欢迎来到学生成绩管理系统

prin tf(\"***************************************************************\\n\")

printf(” 请输入20个学生的姓名和成绩\\n\");

in put(score ,n ame);

printf(” 输入的学生姓名和成绩分别为: \\n\");

for(x=0;x{

prin tf(\"%s,%d\\

}

prin tf(\"\\n\");

printf(\" *****************

学生成绩管理系^统 *************** printf( \"*********

成绩排序直接法请按 0 成绩排序冒泡法请按 printf(\" *********

姓名查找方法一请按 2 成绩查找方法二请按 printf(\" *********

}

printf(\" while(1) {

scan f(\"%d\switch(t) {

/*

\\n ”); 1*******\\n\"); 3*******\\n\");

退出系统请按 请选择

\\");

4 *******\\ n\");

操作选择*/

case 0: zhijie(score ,n ame); duife n( score ,n ame);

break;

case 1: maopao(score ,n ame); duife n( score ,n ame);

break;

case 2: prin tf(\"

请输入学生姓名

xia n1(score ,n ame);

break;

case 3: xia n2(score ,n ame);

break;

case 4: exit(0);

break;

default: printf(\" }

/*

}

:\\n\");

退出系统*/

请在0到4之间选择!\\n\");

2、运行界面

输入学生信息

个个个个空生生生生吐成姓成姓as 60 dong 65 t van 主菜单

成绩管驚 M Mtlf KMtJtXMtltX

直接排序

腓序后的学生姓名和成绩为: 亠£1 (D2 f ,63 L?0 e,71 r,72 C,?3 g, y,?4 h,65 u,75 j ,66 k,&7 1,76 1,77 】,£8 q,69 Q,?8 p,79 冒泡排序

腓序后的学生姓名和成绩为: 帯£0 s,Cl d,62 「3 L?0 e,71 r,72 c,73 g, y,74 h,65 u,75 k,&7 i>77 q,69 p,79 1,76 o,?8 线性查找

请输入学注姓名: 鬆学生成绩为魚 对分查找

I I I— ■ _ J I I M n— b ■- 六、体会及收获

1、关于体会

这次C语言课程设计给我最大的体会是充分调用了

们已有的C语言知识储备,我想,难度就在于这里,要求我 们对每一个知识点,每一个内容板块都了如指掌。如果有哪 里不清楚,编程时就会频繁出错,或者是达不到想要的结果, 比如像循环语句、条件语句、选择语句这些常用的就必须烂 熟于心。如遇到问题,尝试思考,若还没有解决就再翻 书或找找资料,自行琢磨,不断尝试用新的方法解决问题也 是给我的一个很深的体会。

2、关于收获

这次有以下几方面收获:

1 )再次温习了所学的 C语言知识,加深了理解,同时 之前没有注意的一些细节问题引起了重视; 尽量思考,不断努力,自行解决;

2)遇到瓶颈时,

3)当程序没有出现

语法错误但运行不正常时,就要用新的方式替换,不能一味 地陷在死胡同里,用新的思维方式想问题或许会达到想要的 效果;4)多

花时间钻研问题,坚持不懈地努力,多掌握一 些知识,今后解决学习问题才会得心应手。

编程不仅只是考查知识是否掌握牢固,也不只是一个时 间问题,更重要的是一种毅力,一种坚持,一种迎难而上的 韧劲!

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

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

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

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