c语言课程设计___学生成绩管理系统

更新时间:2023-06-10 21:14:01 阅读量: 实用文档 文档下载

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

广东工业大学华立学院

课 程 设 计

课程名称_________程序设计基础_____________ 题目名称_________学生成绩管理系统____________ 学生学部(系)_计算机与艺术设计学部________ 专业班级_________09计算机(2)班___________ 学 号_________11010902052_______________ 学生姓名___________吴洲洋_________________ 指导教师____________卢清秀_________________

2010 年 7 月 2 日

广东工业大学华立学院

课程设计任务书

一、课程设计的内容

对学生信息(包括学号、数学、英语、计算机、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.每个教师都将各自班学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩员。假设,教师现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。

二、课程设计的要求与数据

1、用C语言实现系统;

对学生信息(包括学号、数学、英语、C语言、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.

是高等学校教务管理的重要组成部分,学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:

(1) 每一条记录包括一个学生的学号、姓名、3门课成绩

(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)

(3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。

(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

三、课程设计应完成的工作

(1)编写算法;

(2)算法测试,并有具体的测试结果和结果分析; (3)撰写课程设计报告。

四、课程设计(论文)进程安排

五、应收集的资料及主要参考文献

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

[2]谭浩强. C程序设计题解与上机指导(第三版) . 北京:清华大学出版社, 2005

[3]谭浩强. C程序设计教程 北京:清华大学出版社, 2007

[4]谭浩强. C++程序设计 北京:清华大学出版社, 2004

[5]李春葆,张植民,肖忠付.C语言设计题典[M].北京:清华大学出版社,2002

发出任务书日期: 2010 年 6 月 9 日 指导教师签名: 计划完成日期: 2010 年 7 月 2 日 教学单位责任人签章:

目 录

一 总体设计(包含几大功能模块) ................................................................................ 1

二 详细设计(各功能模块的具体实现算法——流程图) ............................................. 5

三 调试分析(包含各模块的测试用例,及测试结果) .............................................. 15 3.1源程序 ....................................................................................................................... 15 3.2调试与测试 .......................................................................................................... 15

四 总结 ................................................................................................................................ 15

五 参考资料 ........................................................................................................................ 15

一 总体设计(包含几大功能模块) 1、成绩录入功能

2、成绩输出功能

3、成绩查询功能

4、删除模块

5、排序功能

6、统计功能

7、退出系统

二、详细设计(各功能模块的具体实现算法——流程图)

2.1各函数的功能和实现

1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。

2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage() 、

maverage() 、eaverage() 和comaverage() 来输出成绩的平均分数、最高和最低分数。 3、成绩查询模块:可用void find(STUDENT *data, int len) 来实现。找到就输出此学生全部信息。

4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现 5、排序模块:用函数void sort(STUDENT *data, int len)来实现 6、统计功能能:用函数void stat(STUDENT *data, int len) 来实现

7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

三 调试分析(包含各模块的测试用例,及测试结果)

3.1源程序

#include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXN 35

#define MAX_NAME 256

typedef struct student //学生信息 {

int no;

char name[MAX_NAME]; double english; double math;

double Programming; double mark_ave; double mark_tot; } STUDENT;

/*-----------输入信息子程序---------*/ void input(STUDENT *data, int *len) {

int no;

putchar('\n');

printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1."); printf("%s\n", "格式:\n学号\n");

printf("%s\n", "姓名 英语 数学 C语言"); putchar('\n'); printf("如:\n"); printf("5\n");

printf("黄瑞 100 100 100\n"); scanf("%d", &no); while(no != -1) {

data[*len].no = no;

scanf("%s %lf %lf %lf", data[*len].name, &data[*len].english, &data[*len].math,&data[*len].Programming);

data[*len].mark_ave=(data[*len].english+data[*len].math+data[*len].Programming)/3.0;

data[*len].mark_tot=data[*len].english+data[*len].math+data[*len].Programming;

(*len)++;

scanf("%d", &no); } }

/*---------------输出信息子程序---------------*/ void output(STUDENT *data, int len) {

int i;

system("cls");

printf("%8s", "学号"); printf("%8s", "姓名"); printf("%8s", "英语"); printf("%8s", "数学"); printf("%10s", "计算机"); printf("%12s", "平均分"); printf("%10s", "总分"); putchar('\n');

for (i =0; i < 80; i++) putchar('='); putchar('\n');

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

printf("%8d", data[i].no);

printf("%8s", data[i].name);

printf("%8.1lf", data[i].english); printf("%8.1lf", data[i].math);

printf("%10.1lf", data[i].computer); printf("%12.1lf", data[i].mark_ave); printf("%10.1lf", data[i].mark_tot); putchar('\n'); }

for (i =0; i < 80; i++) putchar('='); putchar('\n');

printf("按回车键继续."); getchar(); getchar(); }

/*--------------排序子程序------------*/ void sort(STUDENT *data, int len) {

int i,j,k; STUDENT temp;

for (i=0; i<len-1; i++) {

for (k=i, j=i+1; j<len; j++)

if (data[k].mark_ave > data[j].mark_ave) k=j; if (k != i) {

temp = data[i]; data[i] = data[k]; data[k] = temp; } } }

/*--------------------搜索子程序-----------------------*/ void find(STUDENT *data, int len) {

int find_no, result ; int i;

lab: result=0;

printf("%s\n", "请输入需要查找的学生的学号,退出当前菜单请输入 -1.");

scanf("%d", &find_no);

if (find_no == -1) return; /*exit the fine sub program*/ while( data[result].no != find_no && result < len) result ++; if (result >= len ) {

printf("%s\n", "未查询到相关信息"); goto lab;

}

else {

system("cls");

printf("%s\n", "查询信息如下:"); for (i =0; i < 80; i++) putchar('='); putchar('\n');

printf("%8s", "学号"); printf("%8s", "姓名"); printf("%8s", "英语"); printf("%8s", "数学"); printf("%10s", "计算机"); printf("%12s", "平均分"); printf("%10s", "总分"); putchar('\n');

printf("%8d", data[result].no); printf("%8s", data[result].name);

printf("%8.1lf", data[result].english); printf("%8.1lf", data[result].math);

printf("%10.1lf", data[result].computer); printf("%12.1lf", data[result].mark_ave); printf("%10.1lf", data[result].mark_tot); putchar('\n');

for (i =0; i < 80; i++) putchar('='); putchar('\n'); goto lab; } }

/*-----------------插入子程序-------------*/ void insert(STUDENT *data, int *len) {

int no, pos;

double english, math, Programming, mark_ave, mark_tot; int i;

char name[MAX_NAME];

lab: printf("%s\n", "输入新的记录,退出当前菜单请输入-1."); printf("%s\n", "格式:学号");

printf("%s\n", " 姓名 英语 数学 计算机"); scanf("%d", &no); if (no == -1) return; data[*len].no = no;

scanf("%s %lf %lf %lf", name, &english, &math, &computer); mark_ave=(english+math+computer)/3.0;

mark_tot=english+math+computer; pos = 0;

while ((data[pos].mark_ave < mark_ave) && (pos < *len) ) pos ++;

for (i = *len-1; i >= pos; i--) data[i+1] = data[i]; data[pos].no = no;

strcpy(data[pos].name, name); data[pos].english = english; data[pos].math = math;

data[pos].Programming = computer; data[pos].mark_ave = mark_ave; data[pos].mark_tot = mark_tot; (*len)++; goto lab; }

/*-------------删除子程序--------------*/ void delete_item(STUDENT *data, int *len) {

int no, i, pos; lab: pos=0;

printf("%s\n", "输入需要删除的学生的学号,退出当前菜单请输入-1.");

scanf("%d", &no); if (no == -1) return;

while( (data[pos].no != no) && (pos < *len) ) pos = pos +1; if (pos >= *len) {

printf("%s\n", "未找到需要删除的学生"); goto lab; }

else {

for (i = pos+1;i < *len; i++) data[i-1] = data[i]; *len = *len -1; if (*len == 0) {

printf("%s\n", "没有任何记录,请按回车键返回."); getchar(); getchar(); return; }

goto lab; } }

/*---------------统计子程序------------*/ void stat(STUDENT *data, int len) {

int no_59=0, no_69=0, no_79=0, no_89=0, no_100=0; int i;

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

if (data[i].mark_ave <=59) no_59++;

else if (data[i].mark_ave <=69) no_69++; else if (data[i].mark_ave <=79) no_79++; else if (data[i].mark_ave <= 89) no_89++; else no_100++; }

system("cls");

for (i =0; i < 80; i++) putchar('='); putchar('\n');

printf("%10s", "分数"); printf("%10s", "0--59"); printf("%10s", "60--69"); printf("%10s", "70--79"); printf("%10s", "80--89"); printf("%10s", "90--100"); putchar('\n'); putchar('\n');

printf("%10s", "学生"); printf("%10d", no_59); printf("%10d", no_69); printf("%10d", no_79); printf("%10d", no_89); printf("%10d", no_100); putchar('\n');

for (i =0; i < 80; i++) putchar('='); putchar('\n');

printf("按回车键返回"); getchar(); getchar(); }

/*---------------显示信息子程序------------*/ void paint() {

int i;

system("cls");

printf("%55s\n", "学生管理系统\n");

printf(" 制作者:自动控制欲进行工程学院电气 (2)班 吴洲洋 \n");

for (i = 0; i < 80; i++) putchar('='); putchar('\n');

printf(" 1 输入信息 2 输出信息\n");

printf(" 3 按平均分排序 4 按学号查找\n");

printf(" 5 插入 6 按学号删除\n");

printf(" 7 按平均分输出统计信息 8 保存到文件\n");

printf(" 0 退出\n"); for (i = 0; i<= 79; i++) putchar('='); putchar('\n');

printf("%s\n", "请输入各操作对应的序号:"); }

void save(STUDENT *data, int len)//将数据保存到文件 {

int i; FILE *fp;

fp=fopen("成绩统计表.txt","w"); fprintf(fp,"%8s", "学号"); fprintf(fp,"%8s", "姓名"); fprintf(fp,"%8s", "英语"); fprintf(fp,"%8s", "数学"); fprintf(fp,"%10s", "计算机"); fprintf(fp,"%12s", "平均分"); fprintf(fp,"%10s\n", "总分");

fprintf(fp,"========================================================================\n");

putchar('\n');

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

fprintf(fp,"%8d", data[i].no); fprintf(fp,"%8s", data[i].name);

fprintf(fp,"%8.1lf", data[i].english); fprintf(fp,"%8.1lf", data[i].math);

fprintf(fp,"%10.1lf", data[i].computer); fprintf(fp,"%12.1lf", data[i].mark_ave); fprintf(fp,"%10.1lf\n", data[i].mark_tot);

}

fprintf(fp,"========================================================================\n");

fclose(fp);

printf("文件已保存到\"成绩统计表.txt\""); getchar();getchar(); }

/*-----------主程序--------------*/ void main() {

STUDENT data[MAXN]; int len = 0; char ctrl_ch; paint();

scanf("%c", &ctrl_ch); while (ctrl_ch != '0') { switch(ctrl_ch) { case '1':

input(data, &len); break; case '2':

output(data, len); break; case '3':

sort(data, len); break; case '4':

find(data, len); break; case '5':

insert(data, &len); break; case '6':

delete_item(data, &len); break; case '7':

stat(data, len); break; case '8':

save(data, len); break; default:

if (ctrl_ch != '\n') printf("%s\n", "输入错误!");

break; }

if (ctrl_ch != '\n') paint(); scanf("%c", &ctrl_ch); } }

3.2调试与测试

3.2.1算法调试过程中出现的问题及解决方法

--------------------Configuration: 4 - Win32 Debug-------------------- Compiling... 4.cpp

f:\学习\c语言\ex1\4.cpp(288) : error C2065: 'MAXN' : undeclared identifier f:\学习\c语言\ex1\4.cpp(288) : error C2057: expected constant expression f:\学习\c语言\ex1\4.cpp(288) : error C2466: cannot allocate an array of constant size 0

f:\学习\c语言\ex1\1.cpp(288) : error C2133: 'data' : unknown size 执行 cl.exe 时出错.

1.obj - 1 error(s), 0 warning(s)

解决方法:对MAXN进行定义,在第三行加入#define MAXN 35

3.2.2主要程序运行结果 运行开始

选择1输入成绩

选择2 输出成绩

选择3按平均分排序 再按2输出成绩

选择4查找(输入学号1)

选择5插入新数据

选择6按学号删除(输入学号3)

选择7按平均分输出统计信息

总 结

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。

但我出总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。 2、把分解出来的子任务,做给一个相对独立的模块。 3、在设计一个模块之前,要简单构想一下总界面的显视情况。 4、针对构想出来的界面进行程序的编写。

心 得 体 会

通过这次课程设计,增加了我对软件技术的了解,虽然还不明确软件技术 包含的具体内容,但从学习 C 语言这门课程开始,已发现程序设计的好处,他 对我们数学的学习也有很大的帮助。在学习 C 语言的过程中也学到和巩固了许 多计算机应用基础知识,对计算机的机体也有了一个较为详细的了解。在具体 操作中对这学期所学的 C 语言的理论知识得到巩固加强,达到实训的目的,也 发现自己的不足之处,为我问以后的 c 语言学习奠定了基础,同时体会到 C 语 言具有的语句简洁,使用灵活,执行效率高等特点。发现上机操作的重要作用, 特别是对数组和循环有了深刻的理解。通过实际操作,学会 C 语言程序编程的 基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问 题的能力。 这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团 队合作的可贵 .编写程序是件细心活 ,稍不留神就会出错, 这就必须要求我们对 待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个 符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不 能坚持到底,不能半途而废。 三人行必有我师,遇到问题我们一起讨论,研究,错了再写,写了在改.经过多 次的修改,调试,运行,添加,终于最后在大家的欢呼声中,完成了我的任务.虽说 是累了点,但

我也从中找到了自己的快乐,每当完成一个新的函数时,那心情 是激动啊,这毕竟是自己弄出来的,同时也使我感受到了学习的快乐! 生活上我们也同样如此,以这种精神对待生活,对待生命,我想,我们的 人生会更美好,路是自己走出来的,也只有经过无数次的磨练,无数次地坚定 我们的信心,锻炼我们的意志渐渐地使自己才能够使自己成熟起来,走出一片属 于自己的天空。

2010 年 教 师 评 语 成 绩 及 签 名 2010 年 2010 年

7 月

2 日

7 月

2 日

7 月

2 日

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

Top