C语言实习报告

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总体软件框架

C语言实习报告

C语言实习报告

C语言实习报告

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

C语言实习报告

4.2将输入的所有学生成绩输出

4.3成绩排序模块【流程图】

4.4成绩查询模块:【流程图】

C语言实习报告

C语言实习报告

4.5成绩插入模块

4.6成绩保存模块

将所有学生的成绩信息保存到成绩统计表.txt中

4.7主函数【流程图】

C语言实习报告

5.系统测试

运行开始:

C语言实习报告

C语言实习报告

选择1输入成绩:

C语言实习报告

选择2输出成绩:

C语言实习报告

选择3按平均分排序:

C语言实习报告

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

C语言实习报告

选择5插入新数据:

C语言实习报告

选择6保存:

C语言实习报告

选择0退出

C语言实习报告

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

相关推荐