文档库 最新最全的文档下载
当前位置:文档库 › C语言毕业论文

C语言毕业论文

×××××学院

信息学院网络技术专业毕业论文

题目:学生成绩管理系统

班级:

学生:

学号:

指导教师:

2013年09月28日

摘要

目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。

本系统主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。开发本系统可使学院员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,使各项管理更加规范化。

本系统在开发过程中,注意使其符合操作的业务流程,并力求系统的全面性、通用性,使得本系统不只适用于一家教育机构。在开发方法的选择上,选择了生命周期法与原型法相结合的方法,遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,采取了演化式原型法,随着用户的使用及对系统了解的不断加深,对某一部分或几部分进行重新分析、设计、实施。本论文主要从系统分析、系统设计、系统实施与使用等几个方面进行介绍。

关键字:成绩管理成绩查询C语言

目录

第一章绪论 (4)

1.1课题背景 (4)

1.2目的背景与意义 (4)

1.3项目开发的目标 (5)

1.4 开发工具的选择 (5)

第二章、设计任务分析 (5)

2.1目标 (5)

2.2要求 (5)

2.3学生成绩管理系统的功能 (6)

第三章、模块设计 (6)

3.1主模块 (6)

3.2初始化模块 (6)

3.3按学号查询学生信息 (6)

3.4按姓名查询学生信息 (7)

3.5查询所有学生信息 (7)

3.6根据单科成绩进行排序 (7)

3.7根据总分进行排序 (7)

3.8. 添加学生信息 (7)

3.9删除学生信息 (7)

3.10修改学生信息 (7)

3.11保存学生信息文件 (7)

3.12读入学生信息文件 (7)

3.13查询不及格学生信息 (7)

3.14查询平均成绩 (8)

3.15退出 (8)

第四章、主要数据结构 (8)

第五章、流程图 (9)

第六章、源代码 (10)

6.1头文件 (10)

6.2主函数及各功能函数 (12)

第七章、测试情况 (29)

7.1主模块页面如图7-1所示 (29)

7.2按学号查询学生信息页面如图7-2所示 (29)

7.3按姓名查询学生信息页面如图7-3所示 (30)

7.4查询所有学生信息页面如图7-4所示 (30)

7.5根据单科成绩进行排序页面如图7-5所示 (31)

7.6根据总分进行排序页面如图7-6所示 (31)

7.7添加学生信息页面如图7-7所示 (31)

7.8删除学生信息页面如图7-8所示 (32)

7.9修改学生信息页面如图7-9所示 (32)

7.10保存文件页面如图7-10所示 (33)

7.11读入学生信息页面如图7-11所示 (33)

7.12查询不及格学生信息页面如图7-12 (33)

7.13查询学生总平均成绩页面如图7-13所示 (34)

第八章、小结 (35)

参考文献 (36)

第一章绪论

1.1课题背景

该项目开发的软件为学校学生信息管理系统软件,是鉴于目前学校学生人数剧增,学生信息呈爆炸性增长的前提下,学校对学生信息管理的自动化与准确化的要求日益强烈的背景下构思出来的,该软件设计完成后可用于学校,学院等教育单位的学生信息的管理.

目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息,学生管理系统也是有了很大的发展,商业化的学生信息管理软件也不少.但本系统完全独立开发,力求使系统功能简洁明了,功能齐全且易于操作。

1.2目的背景与意义

学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差,人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着来越重要的作用。

作为计算机应用的一部分,使用计算机对学校的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。

1.3项目开发的目标

建立学生信息管理系统,采用计算机对学生信息进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生信息管理工作流程的系统化、规范化和自动化。

1.4 开发工具的选择

现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有:Microsoft公司的Visual C++6.0,TurboC等。本系统在Microsoft Visual C++6.0下开发。

第二章设计任务分析

2.1目标

(1)掌握和利用C语言进行程序设计的能力。

(2)理解和运用结构化程序设计的思想和方法。

(3)掌握开发一个小型实用系统的基本方法。

(4)学会调试一个较长程序的基本方法。

(5)掌握书写程序设计开发文档的能力

2.2要求

(1)用C语言实现系统。

(2)利用结构体数组实现学生成绩的数据结构设计。

(3)系统具有增加、查询、插入、排序等基本功能。

(4)系统的各个功能模块要求用函数的形式实现。

(5)完成设计任务并书写课程设计报告。

(6)将学生成绩信息存在文件中。

2.3学生成绩管理系统的功能

1--按学号查询学生信息

2--按姓名查询学生信息

3--查询所有学生信息

4--根据单科成绩进行排序

5--根据总分进行排序

6--添加学生信息

7--删除学生信息

8--修改学生信息

9--保存学生信息文件

10--读入学生信息文件

11--查询不及格学生信息

12--查询平均成绩\

0--退出

此项目主要考察我们对结构体、指针、文件的操作,以及C语言算法的掌握,所以完成此题目要求较高的设计能力,尤其是要有大局意识。如何调试程序也非常重要,通过这个程序可学到以前调试程序没有的经验。菜单中的每一个选项都对应一个子程序。

第三章模块设计

将学生成绩管理系统划分为以下几个模块

3.1主模块

功能:显示系统菜单。

3.2初始化模块

功能:初始化单链表为空指针。。

3.3按学号查询学生信息

功能:查找指定姓名的学生信息

其中包括学生姓名、学号和课程的相关信息。

3.4按姓名查询学生信息

功能:查找指定姓名的学生信息。

3.5查询所有学生信息

功能:显示当前所有学生的信息。

3.6根据单科成绩进行排序

功能:按学生各单科成绩从高到低进行排序。

3.7根据总分进行排序

功能:按学生总科成绩从高到低进行排序。

3.8. 添加学生信息

功能:添加学生的具体成绩,包括:姓名、性别、学号、各科具体成绩等。。

3.9删除学生信息

功能:删除该学号的学生的一切信息。

3.10修改学生信息

功能:修改该学号的学生的一切信息。

3.11保存学生信息文件

功能:复制文件备份。

3.12读入学生信息文件

功能:从文件中读入学生的信息。

3.13查询不及格学生信息

功能:查询各科不及格的学生的信息。

3.14查询平均成绩

功能:分别查询各科的具体成绩和学生的总平均成绩。

3.15退出

功能:退出该系统。

第四章主要数据结构

程序设计中用到的学生信息结构体类型

struct _birthday

{ int year;

int month;

int day;};

struct _score

{ float english;

float math;

float mcu;

float total;};

typedef struct _birthday Birthday;

typedef struct _score Score;

struct _student

{ char no[15];

char name[20];

char sex[10];

Birthday birth;

Score score;};

typedef struct _student Student;

第五章 流程图

将学生信息写入磁盘文件

添加学生信息

删除学生信息 按姓名查询学生信息

修改学生信息

按学号查询学生信息 主模块

统计模块

存储模块

维护模块

查询模块

输出模块

从磁盘文件载入学生信息

输出单个学生信息

根据总分进行排序

根据单科成绩进行排序 输出全部学生信息 输出学生的不及格成绩信息 输出平均成绩的情况

第六章源代码

6.1头文件

#ifndef __OP_H_

#define __OP_H_

//所包含的头文件

#include

#include

#include //标准库函数

#include //字符操作函数

#include //控制台输入输出函数

//定义系统中所需要用到的结构体类型

struct _birthday

{

int year;

int month;

int day;

};

struct _score

{

float english;

float math;

float mcu;

float total;

};

typedef struct _birthday Birthday;

typedef struct _score Score;

struct _student

{

char no[15];

char name[20];

char sex[10];

Birthday birth;

Score score;

};

typedef struct _student Student;

// 函数说明

void Menu();

void Run();

void Inti();

void Print(Student *p);

void PrintTablHeader();

void PrintAll(Student *a,int n);

int SearchByNo(Student *a,int n,char no[]);

void SearchByname(Student *a,int n,char name[]); void SortByTotal(Student*a,int n);

void SortByMcu(Student*a,int n);

void SortByMath(Student*a,int n);

void SortByEnglish(Student*a,int n);

void Sort(Student *a,int n,int course);

int DeleteByNo(Student*a,int n,char no[]);

void save(Student *a,int n);

void english(Student stu[] , int n );

void math(Student stu[] , int n);

void mcu(Student stu[] , int n);

void englishaver(Student stu[],int n);

void mathaver(Student stu[],int n);

void mcuaver(Student stu[],int n);

void totalaver(Student stu[],int n);

int load(Student t[]);

//符号常量和变量说明

#define N 100 // 学生最大人数

int length = 0; // 学生实际人数

#define ENGLISH 0 // 英语课程

#define MATH 1 // 数学课程

#define MCU 2 // 单片机课程

#defineTOTAL 3 // 总分

Student stu[N] = // 学生结构体数组,全局变量

{

{"12", "王小安", "男", {1980, 2, 14}, {15, 55,31}},

{"1", "蒋华平", "男", {1989, 11, 24}, {100, 100, 100}},

{"8", "张羽", "女", {1982, 9, 22}, {92, 83, 58}},

{"9", "刘长根", "男", {1980, 2, 18}, {60, 65, 72}},

{"23", "李利民", "男", {1981, 6, 29}, {90, 52, 76}},

{"16", "上官屏", "女", {1980, 8, 9}, {57, 78, 92}}

};

#endif

6.2主函数及各功能函数

#include"op.h"

void Init()

{

int i;

length=5;

for(i=0;i

{

stu[i].score.total=stu[i].score.english+stu[i].score.math +stu[i].score.mcu ;

}

}

void Menu()

{

printf("=====欢迎登录学生信息管理系统======\n");

printf(" 请选择\n");

printf(" 1--按学号查询学生信息\n");

printf(" 2--按姓名查询学生信息\n");

printf(" 3--查询所有学生信息\n");

printf(" 4--根据单科成绩进行排序\n");

printf(" 5--根据总分进行排序\n");

printf(" 6--添加学生信息\n");

printf(" 7--删除学生信息\n");

printf(" 8--修改学生信息\n");

printf(" 9--保存学生信息文件\n");

printf(" 10--读入学生信息文件\n");

printf(" 11--查询不及格学生信息\n");

printf(" 12--查询平均成绩\n");

printf(" 0--退出\n");

printf("=================================\n");

printf("请选择:");

}

void Print(Student *p)

{

printf("%s\t%s\t%s\t%d-%d-%d\t%3.1f\t%3.1f\t%3.1f\t%3.1f",

p->no,p->name,p->sex,

p->birth.year,p->birth.month,p->birth.day,

p->score.english,p->score.math,p->score.mcu,p->score.total);

}

void PrintTablHeader ()

{

printf("学号\t姓名\t性别\t生日\t\t英语\t数学\t单片机\t总分\n");

}

void PrintAll(Student *a,int n)

{

int i;

PrintTablHeader();

for(i=0;i

{

Print(&a[i]);//调用Print函数输出第i个学生信息

printf("\n");

}

}

int SearchByNo(Student *a,int n,char no[]) 按学号查找学生成绩信息

{

int p=-1;

int i;

for(i=0;i

{

if(strcmp(a[i].no,no)==0)

{

p=i;

break;

}

}

return p;

}

void SearchByname(Student *a,int n,char name[]) 按学号查找学生成绩信息{

int i;

int flag=0;

PrintTablHeader();

for (i=0;i

{

if(scrimp(a[i].name, name)==0)

{

flag=1;

Print(&a[i]);

printf("\n");

}

}

if (flag==0) printf("查询失败!");

}

void SortByEnglish(Student*a,int n) 根据英语成绩进行排序

{

int i,j;//循环变量

float maxval;//用于临时保存最大值

int maxpos;//用于临时保存最大值的下标

Student temp;//临时变量

//总共需要N-1次选择和交换

for (i=0;i

{

maxval=a[i].score.english;

maxpos=i;

//在无序区寻找最大值

for (j=i;j

{

if (a[j].score.english>maxval)

{

maxval=a[j].score.english;

maxpos=j;

}

}

if (maxpos!=-1)

{

temp=a[maxpos];

a[maxpos]=a[i];

a[i]=temp;

}

}

}

void SortByMath(Student*a,int n) 根据数学成绩进行排序

{

int i,j;//循环变量

float maxval;//用于临时保存最大值

int maxpos;//用于临时保存最大值的下标

Student temp;//临时变量

//总共需要N-1次选择和交换

for (i=0;i

{

maxval=a[i].score.math;

maxpos=i;

//在无序区寻找最大值

for (j=i;j

{

if (a[j].score.math>maxval)

{

maxval=a[j].score.math;

maxpos=j;

}

}

if (maxpos!=i)

{

temp=a[maxpos];

a[maxpos]=a[i];

a[i]=temp;

}

}

}

void SortByMcu(Student*a,int n) 根据单片机成绩进行排序

{

int i,j;//循环变量

float maxval;//用于临时保存最大值

int maxpos;//用于临时保存最大值的下标

Student temp;//临时变量

//总共需要N-1次选择和交换

for (i=0;i

{

maxval=a[i].score.mcu;

maxpos=i;

//在无序区寻找最大值

for (j=i;j

{

if (a[j].score.mcu>maxval)

{

maxval=a[j].score.mcu;

maxpos=j;

}

}

if (maxpos!=-1)

{

temp=a[maxpos];

a[maxpos]=a[i];

a[i]=temp;

}

}

}

void SortByTotal(Student*a,int n) 根据学生总成绩进行排序{

int i,j;//循环变量

float maxval;//用于临时保存最大值

int maxpos;//用于临时保存最大值的下标

Student temp;//临时变量

//总共需要N-1次选择和交换

for (i=0;i

{

maxval=a[i].score.total;

maxpos=i;

//在无序区寻找最大值

for (j=i;j

{

if (a[j].score.total>maxval)

{

maxval=a[j].score.total;

maxpos=j;

}

}

if (maxpos !=-1)

{

temp=a[maxpos];

a[maxpos]=a[i];

a[i]=temp;

}

}

}

void english(Student stu[] , int n) 查询英语成绩不及格学生信息

{

int i=0;

for(i=0;i

{

if(stu[i].score.english<60)

printf("\t学生证号:%-15s姓名:%-15s英语分数:%-15g\n\n",stu[i].no,stu[i].name,stu[i].score.english);

}

}

void math(Student stu[] , int n) 查询数学成绩不及格学生信息

{

int i=0;

for(i=0;i

{

if(stu[i].score.math<60)

printf("\t学生证号:%-15s姓名:%-15s数学分数:%-15g\n\n",stu[i].no,stu[i].name,stu[i].score.math);

}

}

void mcu(Student stu[] , int n) 查询单片机成绩不及格学生信息

{

int i=0;

for(i=0;i

{

if(stu[i].score.mcu<60)

printf("\t学生证号:%-15s姓名:%-15s单片机分数:%-15g\n\n",stu[i].no,stu[i].name,stu[i].score.mcu);

}

}

void Sort(Student *a,int n,int course)

{

switch (course)

{

case ENGLISH:

SortByEnglish(a,n);

break;

case MATH:

SortByMath(a,n);

break;

case MCU:

SortByMcu(a,n);

break;

case TOTAL:

SortByTotal(a,n);

break;

default:

SortByTotal(a,n);

break;

}

}

/*增加学生信息*/

int Append (Student*a,int n)

{

int pos;

if (n>=N)

{

return n;

}

while (1)

相关文档