C 语言程序设计 课程设计报告
学生成绩管理系统
专业: 班级: 姓名: 指导教师: 年 月 日
目录
1.课程设计目的 ................................................................................................................................ 2
2.问题需求分析 ................................................................................................................................ 2
3.系统设计........................................................................................................................................ 2
4.编程实现........................................................................................................................................ 4
5系统测试........................................................................................................................................ 6
6.实习总结...................................................................................................................................... 11
1.课程设计目的
了解基于C语言的软件开发基本过程与方法,熟悉结构化程序设计的基本方法,了解计算机工作模式,掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的基本方法,养成良好的程序设计习惯和严谨的工作态度,初步获得应用编写C语言程序来解决实际问题的能力。
2.问题需求分析
根据题目要求,由于要录入、读取、保存学生成绩信息,因而要实现文件的输入和输出功能;要求用户可以查询各个学生的成绩,并且可以添加学生成绩信息等,因而要提供查找和添加功能;另外,还应提供键盘式选择菜单以实现功能选择。
3.系统设计
3.1数据结构
由于该系统涉及多个学生的成绩存储,因此,定义一个数据结构,用于存储这些信息。现仅对学生英语成绩、数学成绩、C语言成绩进行统计管理。 建立以下数据结构:
typedef struct student
{
int no; //存储学生学号 char name[MAX_NAME]; //存储学生姓名 double english; //存储学生英语成绩 double math; //存储学生数学成绩 double Programming; //存储学生C语言成绩 double mark_ave; //平均成绩 double mark_tot; //总成绩
} STUDENT;
3.2总体软件框架
3.3程序模块设计
将学生成绩管理系统划分为以下几个模块:
1、显示菜单模块:用void paint()来实现
2、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;用函数void input(STUDENT *data, int *len)来实现此操作。
3、成绩输出模块:输出学生的信息以及成绩,用函数void output(STUDENT *data, int len)来实现:通过学生的姓名来查看学生的相关成绩。
4、排序模块:用函数void sort(STUDENT *data, int len)来实现
5、成绩查询模块:用void find(STUDENT *data, int len) 来实现,找到就输出此学生全部信息。
6、插入模块:用函数void insert(STUDENT *data, int *len)来实现,插入到合适的位置。
7、保存文件:用函数void save(STUDENT *data, int len)来实现,将信息保存到文件中,再关闭文件。
8、主函数:使用switch条件语句调用主菜单函数,选择菜单中要选择对象来执行不同的模块。
4.编程实现
4.1
4.2将输入的所有学生成绩输出
4.3成绩排序模块【流程图】
4.4成绩查询模块:【流程图】
4.5成绩插入模块
4.6成绩保存模块
将所有学生的成绩信息保存到成绩统计表.txt中
4.7主函数【流程图】
5.系统测试
运行开始:
选择1输入成绩:
选择2输出成绩:
选择3按平均分排序:
选择4查找(输入学号1):
选择5插入新数据:
选择6保存:
选择0退出
6.实习总结
课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在这几天里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到许多问题,可以说得是困难重重。这毕竟是第一次做,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固。通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 通过学习《C语言课程设计》使我了解到C语言是一门实践性很强的课程,以及C语言的基本语法规则.程序设计.以及解题的全过程,加深对C语言的了解,得到程序设计的基本方法和技巧的训练,从而更加深一步的对知识的了解,真正能使C语言这个强有力的编程工具去解决实际问题。
7.附:关键源程序
#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 paint()
{
int i;
system("cls");
printf("%55s\n", "中国地质大学(武汉)学生成绩管理系统\n");
for (i=0; i<80;i++)
putchar('=');
putchar('\n');
printf(" 1 输入信息 2 输出信息\n");
printf(" 3 按平均分排序 4 按学号查找\n");
printf(" 5 插入 6 保存到文件\n");
printf(" 0 退出\n");
for (i=0;i<=79;i++)
putchar('=');
putchar('\n');
printf("%s\n", "请输入各操作对应的序号:");
}
/*-----------输入信息子程序---------*/
void input(STUDENT *data, int *len)
{
int no;
putchar('\n');
printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1.");
printf("%s\n", "格式:\n");
printf("%s\n", "学号 姓名 英语 数学 C语言");
putchar('\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", "C语言");
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].Programming);
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(); /*存储enter*/ 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;
}
}
printf("%s\n", "下面显示排序结果,如果需要退出当前菜单请输入 -1."); 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].Programming);
printf("%12.1lf", data[i].mark_ave);
printf("%10.1lf", data[i].mark_tot);
putchar('\n');
}
int no=1;
while(no!=-1)
{
scanf("%d",&no);
}
}
/*--------------------查找子程序-----------------------*/
void find(STUDENT *data, int len)
{
int find_no, result;
int i;
int index=1;
while(index==1)
{
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", "未查询到相关信息");
index=1;
continue;
}
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", "C语言");
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].Programming);
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');
index=1;
continue;
}
index=0;
}
}
/*-----------------插入子程序-------------*/
void insert(STUDENT *data, int *len)
{
int no, pos;
double english, math, Programming, mark_ave, mark_tot;
int i;
char name[MAX_NAME];
while(1)
{
printf("%s\n", "输入新的记录,退出当前菜单请输入-1."); printf("%s\n", "格式:");
printf("%s\n", " 学号 姓名 英语 数学 C语言"); scanf("%d", &no);
if (no == -1) return; /*exit*/ data[*len].no = no;
scanf("%s %lf %lf %lf", name, &english, &math, &Programming);
mark_ave=(english+math+Programming)/3.0;
mark_tot=english+math+Programming;
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 = Programming;
data[pos].mark_ave = mark_ave;
data[pos].mark_tot = mark_tot;
(*len)++;
}
}
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", "C语言");
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].Programming);
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 sele;
paint();
scanf("%c", &sele);
while (sele != '0')
{
switch(sele)
{
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':
save(data, len);
break;
default:
if (sele != '\n') printf("%s\n", "
break;
}
if (sele != '\n') paint();
scanf("%c", &sele);
} 输入错误!");
}
参考书目:
[1] 谭浩强,《C 程序设计》,清华大学出版社,2011
[2] 张冬梅等,《基于PBL的C语言课程设计及学习指导》,清华大学出版社,2011
实习报告一、实习目的:为了提高我们解决实际问的能力,以便于进入工作岗位后能够成为适应现代社会发展需要的高素质人才,为了巩固汉语言专…
xxx市都安县xxx中学。xxx中学是一所处于城乡结合部的农村寄宿式学校。校园位于地苏乡,校园面积50多亩。学校一切教学设备齐全。…
一2月19日我在开始了实习教师的生涯两个多月的实习我受益匪浅实习内容主要是语文教学班主任工作此外还有其他的一些工作既然是实习教师语…
养马岛管委会实习报告系部名称:文学院专业:汉语言文学年级:20XX班级:1班姓名:***学号:_***实践单位:山东省烟台市养马岛…
大学社会实践考核表实践课题汉语言文学实习报告姓名教育层次学号分校专业汉语言文学教学点指导教师日期XX大学学生社会实践考核表教学实习…
手机通讯录管理系统一、设计题目的任务和内容任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界…
目录一前言2二引言221系统开发工具222实习目的323实习基本内容与要求324实习时间安排325实习地点326实习内容3三学生成…
目录一实习目的及意义2二实习任务目的2三实习时间2四实习地点2五实习企业概况2六实习内容3一实习的具体内容3二实习中资料的收集与总…
C语言课程设计报告银行账户管理系统231132姜紫阳菜单一整体需求分析二程序设计思想三程序流程框架示意四程序主要片段及说明五程序优…
实验报告二级学院信息与工程学院系别计算机科学与技术系专业信息管理与信息系统课程名称高级语言程序设计班级姓名实验名称电话订餐信息处理…
本科生课程论文封面课程名称C语言程序课程设计教师姓名本科生姓名本科生学号本科生专业所在院系类别工科日期摘要本文完成了综合练习中第2…