张可鑫 C语言课程设计_学生成绩管理系统

更新时间:2023-05-14 15:28:01 阅读量: 实用文档 文档下载

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

华东交大 C++语言课程设计

报告

题 目: 学生成绩管理系统 姓 名: 张可鑫

学 院: 华东交大

专 业: 电气化铁道技术

学 号: 20142421230159

指导教师: 苏云凤

2015年4月12日星期日

目 录

一 设计目的 .1

二 课程设计的内容........................................2

三 课程设计的要求与数据..................................3

四 课程设计应完成的工作..................................4

五 总体设计(包含几大功能模块)...........................5

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

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

八 总结 ...8

一 设计目的

进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。 二 课程设计的内容

对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成

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

三 课程设计的要求与数据

1、用C语言实现系统;

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

3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:

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

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

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

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

四 课程设计应完成的工作 (1)编写算法;

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

1) 封面扉页 2) 设计任务书 3) 目录

4) 总体设计方案(包括流程图) 5) 使用说明及运行实例(包括界面) 6) 成员设计内容简介

7) 项目源程序代码(注意注释的使用) 8) 指导教师评语

五 总体设计(包含几大功能模块)

1、成绩录入功能 2、成绩输出功能 3、成绩查询功能 4、删除模块 5、排序功能 6、统计功能 7、退出系统

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

6.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()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。 如图6.1

图 6.1

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

7.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 Chinese; double math; double English; 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", "姓名 语文 数学 英语"); putchar('\n'); printf("如:\n"); printf("1\n");

printf("杨江彬 93 95 89\n"); scanf("%d", &no); while(no != -1) {

data[*len].no = no; scanf("%s %lf %lf %lf", data[*len].name, &data[*len].Chinese, &data[*len].math,&data[*len].English);

data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len].English)/3.0;

data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len].English;

(*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].Chinese); printf("%8.1lf", data[i].math); printf("%10.1lf", data[i].English); 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) {

} } }

/*--------------------搜索子程序-----------------------*/ 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].Chinese); printf("%8.1lf", data[result].math); printf("%10.1lf", data[result].English); printf("%12.1lf", data[result].mark_ave); printf("%10.1lf", data[result].mark_tot); putchar('\n');

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

for (i =0; i < 80; i++)

putchar('='); putchar('\n'); goto lab; } }

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

int no, pos;

double Chinese, math, English, 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, &Chinese, &math, &English); mark_ave=(Chinese+math+English)/3.0; mark_tot=Chinese+math+English; 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].Chinese = Chinese; data[pos].math = math;

data[pos].English = English; 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.")

}

/*---------------统计子程序------------*/ 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");

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; }

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(" 制作者: \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].Chinese); fprintf(fp,"%8.1lf", data[i].math); fprintf(fp,"%10.1lf", data[i].English); 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') {

; 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); } }

7.2调试与测试

7.2.1算法调试过程中出现的问题及解决方法(以下为其中一例)

--------------------Configuration: Cpp1 - Win32 Debug--------------------

Compiling... Cpp1.cpp

C:\Documents and Settings\Administrator\桌面\Cpp1.cpp(9) : error C2065: 'MAX_MAME' : undeclared identifier

C:\Documents and Settings\Administrator\桌面\Cpp1.cpp(9) : error C2057: expected constant expression

C:\Documents and Settings\Administrator\桌面\Cpp1.cpp(10) : error C2229: struct 'student' has an illegal zero-sized array

执行 cl.exe 时出错.

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

解决方法:把“MANE”改成“NAME”---拼写错误。

7.2.2主要程序运行结果

选择3按平均分排序 再按2输出成绩(如图7.3)

图7.3

选择4查找(输入学号3)(如图7.4)

图7.4

选择5插入新数据(图7.5)

图7.5

选择6按学号删除(输入学号4)(图7.6)

图7.6

选择7按平均分输出统计信息(图7.7)

图7.7

选择8保存(图7.8.1 7.8.2)

7.8.1

图7.8.2

选择0退

八.总结

这一个星期做这个程序设计,对于我来说简直是难上加难,因为我对计算机不是很感兴趣,但是,经过我的不懈努力,还是做出来了!

首先说第一大难度就是我对C++程序设计不是很了解,在进度方面比较慢,还有就是我的计算机水平不是很高,以后还得多多努力,提高计算机的操作水平!这一个星期我“夜以继日奋不顾身”的在做这个课程设计,但由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误,如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。但是幸运的是调试过程完成的非常顺利。

回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整一个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到的问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体 通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。希望下次的程序设计能够更加的完美!!谢谢大家!

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

Top