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

时间:2024.4.13

数 据 结 构

课 程 设 计 报 告

课题名称 学生成绩管理系统

姓  名   

学  院 

系科班级 

指导老师  

日  期 20XX年1月17日

学生成绩管理系统

一、 问题描述

现有学生成绩信息文件1(1.txt),内容如下

姓名    学号   语文  数学   英语    

张明明  01     67    78      82

李成友  02     78    91      88

张辉灿  03     68    82      56

王露   04     56    45      77

陈东明  05     67    38      47

….      ..      ..     ..       …

学生成绩信息文件2(2.txt),内容如下:

姓名    学号   语文  数学   英语    

陈果   31     57    68     82

李华明  32     88    90      68

张明东  33     48    42      56

李明国  34     50    45      87

陈道亮  35     47    58      77

….      ..      ..     ..       …

二、 基本要求

试编写一管理系统,要求如下:

1) 实现对两个文件数据进行合并,生成新文件3.txt

2) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt

3) 对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)

4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)

5) 要求使用结构体和数组实现上述要求.

三、 设计目的

1)培养学生综合程序设计的能力,训练学生灵活应用所学数据结构知识,独立完成问题分析、总体设计、详细设计和编程实现等软件开发全过程的综合实践能力。

2)巩固、深化学生的理论知识,提高编程水平,培养严谨的科学态度和良好的学习作风。为今后学习其他计算机课程打下基础。

3)将书本上的理论知识和工作、生产实际有机地结合起来,从而锻炼学生分析问题、解决实际问题的能力,提高编程序能力和创新意识。

四、 概要设计

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

五、 详细设计

1)主要数据结构:

struct student

{

char name[6];

int num;

long int chi;

long int math;

long int eng;

long int sum;

};

2)模块功能:

合并模板、提取模板、排序模板、查询模板、模块功能

1、生成文件3:实现对两个文件数据进行合并,生成新文件3.txt;

2、查看文件3:显示文件3里的所有信息;

3、生成文件补考文件4:抽取出三科成绩中有补考的学生并保存在一个新文件4.txt;

4、查看文件4:显示文件4里的所有信息;

5、排序后的文件3:对合并后的文件3.txt中的数据按总分降序排序(冒泡、插入);

6、查找学生信息:按姓名查找学生的信息并输出结果(顺序、折半);

3)调用关系

主函数可调用其它函数

六、 源程序

#include<stdio.h>

#include<stdlib.h>

struct student

{

char name[6];

int num;

long int chi;

long int math;

long int eng;

long int sum;

};

struct student stu1[100],stu2[100],stu3[100],stu4[100],t,tmp;

FILE *fp;

int i,j;

void creat1() //对1.txt的成绩进行读取

{ int i;

for(i=1;i<=5;i++)

fscanf(fp,"%s %d %ld %ld %ld",stu1[i].name,&stu1[i].num,&stu1[i].chi,&stu1[i].math,&stu1[i].eng);

printf("\n1.txt中学生的成绩如下:\n");

printf("姓名 学号 语文 数学 英语\n");

for(i=1;i<=5;i++)

printf("%s %d %ld %ld %ld\n",stu1[i].name,stu1[i].num,stu1[i].chi,stu1[i].math,stu1[i].eng);

}

void creat2() //对2.txt的成绩进行读取

{ int i;

for(j=1;j<=5;j++)

fscanf(fp,"%s %d %ld %ld %ld",stu2[j].name,&stu2[j].num,&stu2[j].chi,&stu2[j].math,&stu2[j].eng);

printf("\n2.txt中学生的成绩如下:\n");

printf("姓名 学号 语文 数学 英语\n");

for(j=1;j<=5;j++)

printf("%s %d %ld %ld %ld\n",stu2[j].name,stu2[j].num,stu2[j].chi,stu2[j].math,stu2[j].eng);

}

void hb() //把合并后的成绩赋值到新的结构体数组stu3[a]中

{

int i;

for(i=1;i<=5;i++)

{

stu3[i]=stu1[i];

}

for(i=6;i<=6+j;i++)

{

stu3[i]=stu2[i-5];

}

printf("\n3.txt中所有学生的成绩名单:\n");

printf("姓名 学号 语文 数学 英语 总分\n");

for(i=1;i<=10;i++)

{ stu3[i].sum=stu3[i].math+stu3[i].eng+stu3[i].chi;

printf("%s %d %ld %ld %ld %ld\n",stu3[i].name,stu3[i].num,stu3[i].chi,stu3[i].math,stu3[i].eng,stu3[i].sum);

fprintf(fp,"%s %d %ld %ld %ld %ld\n",stu3[i].name,stu3[i].num,stu3[i].chi,stu3[i].math,stu3[i].eng,stu3[i].sum);

}

}

int extract() //把成绩中需要补考的学生成绩保存在数组stu4[j]中

{ int j;

j=1;

for(i=1;i<=10;i++)

{

if(stu3[i].math<60||stu3[i].eng<60||stu3[i].chi<60)

{

stu4[j]=stu3[i];

j++;

}

}

printf("\n补考学生成绩名单如下:\n");

printf("姓名 学号 语文 数学 英语\n");

for(i=1;i<j;i++)

{

fprintf(fp,"%5s %3d %4d %4d %4\n",stu4[i].name,stu4[i].num,stu4[i].chi,stu4[i].math,stu4[i].eng);

printf("%5s %3d %4d %4d %4d\n",stu4[i].name,stu4[i].num,stu4[i].chi,stu4[i].math,stu4[i].eng);

}

}

void sort1() //冒泡排序

{

for(i=1;i<=10;i++)

{

for(j=i+1;j<=10;j++)

{

if(stu3[j].sum>stu3[i].sum)

{ t=stu3[j];

stu3[j]=stu3[i];

stu3[i]=t;

}

}

}

printf("\n按总分由高到低排序(冒泡)后的成绩如下:\n");

printf("姓名 学号 语文 数学 英语 总分\n");

for(i=1;i<=10;i++)

printf("%s %d %ld %ld %ld %ld\n",stu3[i].name,stu3[i].num,stu3[i].chi,stu3[i].math,stu3[i].eng,stu3[i].sum);

}

void sort2() //插入排序

{

for(i=2;i<=10;i++)

{

if(stu3[i].sum>stu3[i-1].sum)

{

tmp=stu3[i];

stu3[i]=stu3[i-1];

for(j=i-1;j>0&&tmp.sum>stu3[j].sum;j--)

stu3[j+1]=stu3[j];

stu3[j+1]=tmp;

}

}

printf("\n按总分由高到低排序(插入)后的成绩如下:\n");

printf("姓名 学号 语文 数学 英语 总分\n");

for(i=1;i<=10;i++)

printf("%s %d %ld %ld %ld %ld\n",stu3[i].name,stu3[i].num,stu3[i].chi,stu3[i].math,stu3[i].eng,stu3[i].sum);

}

void search1() //名字查找方式(顺序查找)

{

char fname[6];

printf("\n请输入要查找学生的姓名:");

scanf("%s",&fname);

for(i=1;i<=10;i++)

{

if(!strcmp(stu3[i].name,fname))

{

printf("\n你所查找(名字顺序)的学生成绩如下:\n");

printf("姓名 学号 语文 数学 英语 总分\n");

printf("%s %d %ld %ld %ld %ld\n",stu3[i].name,stu3[i].num,stu3[i].chi,stu3[i].math,stu3[i].eng,stu3[i].sum);

}

}

}

void search2() // 名字查找方式(折半查找)

{

char fname[6];

int mid,low=1;

int high=10;

printf("\n请输入要查找的学生的姓名:");

scanf("%s",&fname);

while(low<=high)

{

mid=(low+high)/2;

{

if(strcmp(stu3[mid].name,fname)==0) break;

else if(strcmp(fname,stu3[mid].name)>0) high=mid;

else low=mid;

}

}

printf("\n你所查找(名字折半)的学生成绩如下:\n");

printf("姓名 学号 语文 数学 英语 总分\n");

printf("%s %d %ld %ld %ld %ld\n",stu3[mid].name,stu3[mid].num,stu3[mid].chi,stu3[mid].math,stu3[mid].eng,stu3[mid].sum);

}

void main()

{ char digit;

printf("***************************系统功能菜单******************************* \n");

printf(" ----------------------------- ---------------------------- \n");

printf(" ************************************************************ \n");

printf(" *1. 读取3.txt的成绩(合并) * *2. 读取4.txt的成绩(补考) * \n");

printf(" ************************************************************ \n");

printf(" *3. 按总分排序(冒泡) * *4. 按总分排序(插入) * \n");

printf(" ************************************************************ \n");

printf(" *5. 按名字查找 (顺序) * *6. 按名字查找(折半) * \n");

printf(" ************************************************************ \n");

printf(" *7. 退出系统 * \n");

printf(" ************************************************************ \n");

printf(" ------------------------------ --------------------------- \n");

printf("请选择菜单编号:");

scanf("%c",&digit);

switch(digit)

{

case '1':

fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

break;

case '2':

fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

fp=fopen("d:\\4.txt","w");

extract();

fclose(fp);

break;

case '3':

fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

sort1();

break;

case '4':

fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

sort2();

break;

case '5': fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

search1();

break;

case '6': fp=fopen("d:\\1.txt","r+");

creat1();

fclose(fp);

fp=fopen("d:\\2.txt","r+");

creat2();

fclose(fp);

fp=fopen("d:\\3.txt","w");

hb();

fclose(fp);

search2();

break;

case '7': break;

}

}

七、 测试结果

1) 合并:

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

2) 排序:

冒泡排序:

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

插入排序:

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

3) 抽出补考学生:

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

4) 按姓名查找:

顺序查找:

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

折半查找:

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

八、 心得体会

本系统设计是为了合并两个信息表,然后对信息表进行排序,从信息中查询信息。

由于C语言学的不扎实,编程时遇到了很多困难,开始调试的时候经常出现很多的错误,经常容易烦躁,但是经过一段的时间的锻炼使得我能够一步一步的去解决问题。在程序设计方面,逐渐感觉到模块化设计的重要性,应该分析出功能模块,然后对其细节中的共性和特性作分析。

这次的设计,让我大大地感觉到,成功的程序设计是要建立在熟悉语言的基础之上的。每一次程序设计能大大地增加对语言的熟悉和感知,能使理论与实际应用相结合,提高了自己组织数据及编写程序的能力。培养了基本的、良好的程序设计技能以及合作能力。在上机操作的过程中,培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际和实践编程的能力。

 总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。

九、 参考文献:

1.数据结构(C语言版) 严蔚敏,吴伟明 清华大学出版社

2.C程序设计(第三版) 谭浩强 清华大学出版社

3.百度搜索

更多相关推荐:
学生成绩管理系统设计报告

电子信息科学与技术专业课程设计题单班级_***_学生***课程名称专业课程设计_课题密码锁的设计设计要求利用visualc#作为前台开发工具,SQLServer后台数据库管理,实现一学生成绩管理系统。实现具体功…

数据结构课程设计——学生成绩管理系统报告书

课程设计报告书设计名称题目学生姓名专业班别学号指导老师日期年XXX一问题描述设计目的1掌握线性链表的建立2掌握线性链表的基本操作3掌握查找的基本算法设计内容利用线性链表实现学生成绩管理系统具体功能输入输出插入删...

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

山东交通学院java语言课程设计题目学生成绩管理系统系部信息科学与电气工程学院专业信息管理及信息系统班级信管111姓名田忠平学号110813125指导教师庞希雨时间20xx年4月1日至4月14日共2周指导教师签...

java学生成绩管理系统课程设计报告以及代码共享

java学生成绩管理系统课程设计报告以及代码共享Java语言课程期末作业题目第9题学生成绩管理系统学院计算机学院专业计算机科学与技术班别学号姓名20xx年12月7日一课程题目设计一个简易的学生成绩管理系统用于记...

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

目录摘要1第一章绪论错误未定义书签11设计目的错误未定义书签12开发工具选择错误未定义书签13开发环境错误未定义书签14本报告的主要内容错误未定义书签第二章需求分析错误未定义书签21系统需求简介2211系统目标...

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

C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1能按学期按班级完成对学生成绩的录入修改2能按班级统计学生的成绩求学生的总分及平均...

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

数据库原理及应用课程设计报告目录1引言111课程设计选题112课程设计的目的113课程设计的背景12系统分析与设计221功能及性能分析2211功能需求222系统的开发运行环境223系统总体设计23数据库设计33...

c++学生成绩管理系统+课设报告书(带源代码)精品

第一章需求分析第二章程序设计1概要设计2详细设计1课程设计性质和目的2输入输出的形式3程序的实现功能3调试分析4使用说明第三章使用说明和程序流程图1程序流程图2课程设计经验和体会5测试数据山东科技大学信息工程系...

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

C课程设计报告书题目学生成绩管理系统专业信息与计算科学班级020xx03学号020xx0306姓名张亚炬任课老师文军学生成绩管理系统课程设计报告摘要本系统主要用于对学生的成绩进行管理通过本系统可以将各个学生的成...

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

C课程设计报告20xx年1月1日目录第一章绪论111设计目的112开发工具选择113开发环境114本报告的主要内容1第二章需求分析221系统需求简介2211系统目标2212功能需求分析2213性能需求分析2第三...

C_学生成绩管理系统课程设计报告[1]

C程序设计课程设计报告20xx20xx学年第2学期题目专业计算机应用班级11计应姓名学号指导教师成绩20xx年12月17日目录摘要1第一章绪论211设计目的212开发工具选择213开发环境214本报告的主要内容...

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

C语言课程设计报告题目学生成绩管理系统学院计算机与信息工程学院专业信息管理与信息系统班级09级1班学号094631105姓名阿布都许克尔尔肯指导老师达新民成绩20xx年5月18日C语言程序设计课程设计报告一课程...

学生成绩管理系统课程设计报告(29篇)