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

更新时间:2023-08-24 07:01:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件设计基础

课程设计报告

班级:网络工程08-X班 姓名: XXX 学号: 082********

2009年07月03日

目 录

1 课程设计的目的……………………………………………………1 2 课程设计的时间……………………………………………………1 3 课程设计的内容……………………………………………………1 3.1 基本要求题目…………………………………………………1 3.1.1 题目名称及要求……………………………………………1 3.1.2 程序…………………………………………………………1 3.1.3 执行结果……………………………………………………2 3.2 综合训练………………………………………………………2 3.2.1 设计题目……………………………………………………2 3.2.2 设计要求……………………………………………………2 3.2.3 系统各模块(函数)组成…………………………………3 3.2.4 流程图………………………………………………………3 3.2.5 各变量的定义和作用 ……………………………………11 4 课程设计遇到的问题及解决过程 ………………………………11 5 课程设计心得体会 ………………………………………………11 6 参考文献 …………………………………………………………11 7 附录 ………………………………………………………………12

2

1 课程设计的目的

通过C语言课程设计的实际锻炼,进一步深刻学习C语言的精髓,掌握C语言的基本编程方法。通过对程序的编写,锻炼自己的动手能力和解决问题的能力,能够体会到发现问题、解决问题的过程的幸苦。

通过本次的课程设计,更深一步磨练自己克服困难的意志,体会C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高的特点,从而培养自己程序汇编语言的思想,深刻理解结构化程序设计方法以及模块化设计的思想。 课程设计目的的基本要求:

1 通过课程设计,进一步熟悉掌握以下知识:数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针等。

2 通过课程设计,达到系统理解、综合运用课程知识的学习目标。 3 通过课程设计,学会用C语言程序解决实际问题的方法。

2 课程设计时间 6月22日——7月3日 3 课程设计内容

3.1 基本要求题目 3.1.1 题目名称及要求

请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。(数组维数用宏定义)

3.1.2 程序

运行程序环境 Turbo C++ 6.0

#include "stdio.h" #define M 4 #define N 5 void main() {

int fun(int a[M][N]);

int num[M][N]={{7,8,9,4,5},{4,5,6,3,1},{4,5,6,3,2},{7,9,6,5,2}}; int b;

b=fun(num);

1

printf("数组的外围元素之和是\n%d\n",b); }

int fun(int a[M][N]) {

int i,j,sum=0; for(i=0;i<M;i++) for(j=0;j<N;j++) {

if(i==0||j==0||i==M-1||j==N-1) sum=sum+a[i][j]; }

return (sum); }

3.1.3 执行结果

通过宏定义,已经定义数组维数,并在主函数给定数组。 程序在Turbo C++ 6.0环境下运行结果为: 数组的外围元素之和是: 73

3.2 综合训练

3.2.1 设计题目

学生成绩管理(结构体数组、函数、指针、算法及流程结构等的综合应用)程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统

3.2.2 设计要求

(1) 主菜单

(2) 各菜单项功能

1.成绩录入:输入学生的学号、姓名及三门课的成绩; 2.成绩查询:

按学号查询学生成绩。 查询不及格学生的成绩。 3.成绩统计:

计算学生的平均分;

根据学生的平均分高低,对学生的数据进行排序后输出; 对学生单科成绩排序,输出学生姓名与该科成绩;

2

4.退出系统:退出整个系统(即主菜单)。 3.2.3 系统各模块(函数)组成

系统通过宏定义,定义了全局变量,即学生人数,学科门数,以及定义了数组,以供输入学生学号的取用。本系统通过主函数main,调用主菜单,通过主菜单的选择语句,继续调用成绩录入函数、成绩查询函数、成绩统计函数,执行完各个函数后,再次返回主菜单函数,通过主菜单,实行退出,以上描述可参见下图,以便观看:

图3-2-3模块关系图

3.2.4 流程图 本程序流程图如下:

3

图3-2-4-1 主函数流程图

图3-2-4-2 菜单函数流程图

4

图3-2-4-3 成绩录入函数流程图

5

图3-2-4-4 成绩查询函数流程图

6

7

8

9

图3-2-4-5 成绩统计函数流程图

10

3.2.5 各变量的定义和作用

主函数:定义整型变量,作为以下子函数的使用。

主菜单:定义了整型变量,用于判断,从而进行选择。

成绩录入函数:定义整型变量i,j,用于循环,进行多人成绩,姓名的录入。 成绩查询函数:定义整型变量no和字符变量name,用于对所查学生的姓名以及循环的使用。

成绩统计函数:定义整型变量i,j,为了能够在对成绩的求平均值以及冒泡法排序实现循环做铺垫;定义了浮点型变量Average,分别表示学生的单科平均成绩和总平均成绩;定义了浮点型temp变量,实现平均值的代替;定义了字符型temp1,temp2,实现对学生名字的代替。.

4 课程设计遇到的问题及解决过程

1. 在引用库函数的时候出现警告,通过咨询指导老师以及查阅书籍,通过加入头文件,解决了警告问题。

2. 对宏定义知识点认识不足,通过同学讨论、问老师,对宏定义有了进一步了解,掌握了宏定义的应用方法,实现了在程序中正确应用宏定义的方法。

3. 起初无法实现对调用子函数后返回主菜单的方法,通过网上学习,用getch()解决了这类问题。

4. 运行程序过程中,无法对调用后的清屏工作进行处理,通过查找书籍,运用“cls”解决了此类问题。

5 课程设计心得体会

通过本次课程设计,锻炼了自己的意志,在探索中发现问题,在实践中解决问题,并在思考中完善问题。这次课程设计,让我真正的了解了C语言的思想所在,也让我感受到了程序汇编语言的魅力,知道了它简单的一面和它难的一面。既看见了探索的重要,也懂得了团队精神的可贵。

通过这次实际的操作,也让我看到了我自身的不足之处,深知自己的水平的浅显,了解了C语言,以及科学的严谨,看见了科学的伟大,并且树立了对科学的探索目标。 这次课程设计也同样让自己有了对自己本专业深层次的认识,并对自己以后的专业课的学习有了新的目标,对自己的以后的学习规划有了更进一步的想法。

6 参考文献

[1] 谭浩强著.C程序设计(第三版).北京:清华大学出版社,2005

11

7 附录:

+++++++++++++++++++++++++++++++++++++++++ fun函数源程序详细信息

+++++++++++++++++++++++++++++++++++++++++ #include "stdio.h" #define M 4 #define N 5 void main() {

int fun(int a[M][N]);

int num[M][N]={{7,8,9,4,5},{4,5,6,3,1},{4,5,6,3,2},{7,9,6,5,2}}; int b;

b=fun(num);

printf("数组的外围元素之和是\n%d\n",b); }

int fun(int a[M][N]) {

int i,j,sum=0; for(i=0;i<M;i++) for(j=0;j<N;j++) {

if(i==0||j==0||i==M-1||j==N-1) sum=sum+a[i][j]; }

return (sum); }

+++++++++++++++++++++++++++++++++++++ 综合训练源程序详细信息

+++++++++++++++++++++++++++++++++++++ #include<stdio.h> #include<stdlib.h> #include<conio.h>

#define N 3 /*学生人数*/ #define M 3 /*课程门数*/ void input(); void display(); void search(); void statistics(); void menu();

12

char name[50][50]; int snum[10];

float courses[N][M];

void main()/*主函数*/ {

int i=0; int j=0; while(1)

{ system("cls"); /*清屏*/ menu(); } }

void menu()/*菜单*/ {

int num=0; int n=0;

printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("+ 学生成绩管理系统 +\n");

printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("+ 1. 成绩录入 +\n"); printf("+ 2. 成绩查询 +\n"); printf("+ 3. 成绩统计 +\n"); printf("+ 4. 退 出 +\n");

printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("++++++++++++++++++++++++++++++++++++++++++++++\n"); printf(" 请选择(选项数字1-4):"); scanf("%d",&num); switch(num) {

case 1:

system("cls"); input(); break; case 2:

system("cls");

printf("请输入要查询的学生号:"); scanf("%d",&n); search(n); break; case 3:

13

system("cls"); statistics(); break; case 4:

exit(1);

default:break; } }

void input() /*成绩录入*/ {

int i=0; int j=0;

for(i=0;i<N;i++) {

printf("请输入学生号:"); scanf("%d",snum); getch();

printf("请输入学生姓名:"); getchar();

scanf("%s",&name[i]); for(j=0;j<M;j++) {

printf("第%d门成绩的分数为:",j+1); scanf("%f",&courses[i][j]); }

printf("\n\n"); }

printf("\n");

printf("**********************************\n"); printf("*已输入完毕,按任意键返回主选单!*\n"); printf("**********************************\n"); getch(); }

void search(int no)/*成绩查询函数*/ {

int i=0;

printf("您选择了查看学生%d号的成绩:",no); printf("姓名是:");

14

puts(name[no-1]); for(i=0;i<M;i++) {

printf("%0.2f ",courses[no-1][i]); }

printf("\n");

printf("**********************************\n"); printf("* 按任意键返回主选单! *\n"); printf("**********************************\n"); getch(); }

void statistics() /*成绩统计函数*/ {

float cAverage[M]; /*每门课程平均分*/ float sAverage[N]; /*每个学生平均分*/ float temp=0; char temp1=0; char temp2=0; int i=0; int j=0;

/*算平均分*/

printf("单科课程平均分为:"); /*单科课程平均分*/ for(i=0;i<M;i++) {

for(j=0;j<N;j++) {

temp=temp+courses[j][i]; }

cAverage[i]=temp/M;

printf("%0.2f\t",cAverage[i]); temp=0; temp1=0; temp2=0; }

temp=0;

printf("\n学生成绩平均分为:\n"); for(j=0;j<N;j++) /*学生成绩平均分*/ {

for(i=0;i<M;i++) {

temp=temp+courses[j][i];

15

}

sAverage[j]=temp/N;

printf("%0.2f\t",sAverage[j]); puts(name[j]);

temp=0; }

/*排序(冒泡法)*/ for(i=0;i<M;i++) for(j=0;j<M-i-1;j++)

if(cAverage[j]<cAverage[j+1]) {

temp=cAverage[j];

cAverage[j]=cAverage[j+1]; cAverage[j+1]=temp; strcpy(temp1,name[j]);

strcpy(name[j][j],name[j+1][j+1]); strcpy(name[j+1][j+1],temp1); }

printf("\n单科课程的前三名:"); for(i=0;i<3;i++) {

printf("\n第%d名:%0.2f 姓名:",i+1,cAverage[i]); puts(name[i]); }

temp=0;

for(j=0;j<N;j++) for(i=0;i<N-j-1;i++)

if(sAverage[i]<sAverage[i+1]) {

temp=sAverage[i];

sAverage[i]=sAverage[i+1]; sAverage[i+1]=temp; strcpy(temp2,name[i][i]);

strcpy(name[i][i],name[i+1][i+1]); strcpy(name[i+1][i+1],temp2); }

printf("\n学生总成绩前三名:"); for(i=0;i<3;i++) {

printf("\n第%d名:%0.2f 姓名:" ,i+1,sAverage[i]); puts(name[i]); }

16

printf("\n");

printf("**********************************\n"); printf("* 按任意键返回主选单! *\n"); printf("**********************************\n"); getch(); }

17

本文来源:https://www.bwwdw.com/article/2cni.html

Top