学生成绩管理项目

程序设计课程设计报告书

题目 : “学生成绩管理”的设计与实现
学院 : 信息工程学院
班级 : 软件Q1841班
学号 : 18130216
作者 : 华书磊
指导老师 : 李 祥

二〇一八年四月二十六日

目 录
第1章 需求分析 1
一、 市场需求 1
第2章 功能介绍 2
一、 成绩添加及显示 2
二、 查找或修改个人成绩 2
第3章 总体设计 3
一、 结构框架 3
二、 功能的实现 3
总 结 6
附 录 1

第1章需求分析
一、市场需求
1.学生成绩管理项目具备极大的市场需求,许多学校都需要这样一个项目来统计学生的成绩情况,
本软件,本项目属于极简单式操作项目,可行性比较大,容易上手,市场需求量大。

第2章功能介绍
一、成绩添加及显示
1.成绩的添加
1)成绩的添加是按照菜单的形式进行。
2)输入成绩极其简便,只需按照项目所给内容一步一步地输入即可。
2.成绩的显示
1)成绩的显示也是在菜单上进行。
2)显示出来的程序是按总分的降幂排列。
二、查找或修改个人成绩
1.查找个人成绩
1)查找时只需输入学号即可显示相对于的成绩(因为学号是唯一的)。
2.修改个人成绩
1)修改时按照步骤进行,先输入对应的学号,输入完毕后就显示出相对应的成绩,然后按照菜单进行修改。
第3章总体设计
一、结构框架
1.单链表的储存方式
1)由于每个人的信息量太大,本项目采用单链表的储存结构,防止每次的数据交换,动用指针而不动数据,使得排序更加快捷。
二、功能的实现
1.主函数的构建
1)主函数采取菜单的模式进行构建,使得项目形成一个整体。
2.功能函数的添加
1)在基本框架都构建完成后进行功能函数的添加。
2)功能的添加基于对广大使用者的需求并后期进行维护升级。
总 结

做项目时,首先进行结构体的选择,选择了单链表储存结构。对于单链表储存结构进行编写,

打算先把“龙骨架”搭建完毕,然后再向其中添加“血肉”,即把大致结构框架搭建完毕再向其

添加功能函数,在搭建结构体的过程中出现了很多问题,许多的编译出错,但经过不懈的努力

之后,这些错误都一一找尽,终于完成了一个只包含输入和输出的单链表“骨架”,在骨架完工

后,便在其中又慢慢的添加功能性函数,函数的添加远远比骨架的搭建轻松,添加好一系列函

数后,程序也调通了,最后再弄文件,在读写文件时出现了一个错误,就是每次存入txt文件再

显示个人成绩后多了一项混乱的数据,经过几番检查后发现txt文件的最后有一个空格,我猜想

应该是那个空格影响了数据,就把fprintf里面的换行用if-else进行选择,解决了多出一项混乱

数据的问题。最终项目圆满完成。
附 录
程序清单
Main.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "Grade.h"

int main()
{
int id, t, x; // 学号,索引号
PERSON person;
GRADE grade;
char choice;
char filename[1000] = "MyFile.txt";
GradeCreate(&grade);
GradeRead(filename, &grade);
system("color f0");

do
{
    system("cls");
    printf("A-添加 S-显示 F-查找 M-修改 Q-退出 > ");
    scanf(" %c", &choice);
    choice = toupper(choice);

    switch (choice)
    {
        case ‘A‘:
            printf("添加:\n");
            PersonInput(&person);
            GradeAppend(&grade,&person);
            break;
        case ‘S‘:
            if (grade.head->next != NULL)
            {
                GradeSort(&grade);
                printf("学号         姓名       语文    数学    英语    物理    化学    生物    总分\n");
            }
            GradeOutput(&grade);
            getch();
            break;
        case ‘F‘:
            printf("请输入学号:");
            scanf(" %d", &id);
            t = GradeFind(&grade, id);
            GradeOutputPerson(&grade, t);
            getch();
            break;
        case ‘M‘:
            printf("请输入学号:");
            scanf(" %d", &id);
            t = GradeFind(&grade, id);
            GradeOutputPerson(&grade, t);
            GradeModify(&grade, t);
        case ‘Q‘:
            break;
        default:
            printf("错误的操作!!!\n");
    }
}while (choice != ‘Q‘);
GradeWrite(filename, &grade);
GradeDestroy(&grade);

return 0;

}
Grade.h
#ifndef _Gradeh
#define _Gradeh

#include "Person.h"

// 定义成绩表(单链表)类型
typedef struct
{
int length;
// 头指针
PERSON *head;
}GRADE;

// 创建成绩表
void GradeCreate(GRADE grade);
// 清空成绩表
void GradeClear(GRADE
grade);
// 销毁成绩表
void GradeDestroy(GRADE grade);
// 显示成绩表
void GradeOutput(const GRADE
grade);
// 添加学生信息
void GradeAppend(GRADE grade, const PERSON person);
// 写成绩表
void GradeWrite(const char filename, const GRADE grade);
// 读成绩单
void GradeRead(const char filename, GRADE grade);
// 查找个人学号查询
int GradeFind(const GRADE grade, const int id);
// 输出个人信息
void GradeOutputPerson(const GRADE
grade, int x);
//排序
void GradeSort(GRADE grade);
//修改
void GradeModify(GRADE
grade, int x);

#endif
Grade.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Grade.h"

// 创建成绩表
void GradeCreate(GRADE grade)
{
grade->head = (PERSON
)malloc(sizeof(PERSON));
grade->length = 0;
grade->head->next = NULL;
}
// 清空成绩表
void GradeClear(GRADE grade)
{
PERSON
p;
while (grade->head->next)
{
p = grade->head->next;
grade->head->next = p->next;
free(p);
}
grade->length = 0;
}
// 销毁成绩表
void GradeDestroy(GRADE grade)
{
GradeClear(grade);
free(grade->head);
grade->head = NULL;
grade->length = 0;
}
// 显示成绩表
void GradeOutput(const GRADE
grade)
{
PERSON p = grade->head->next;
if (p)
{
while (p)
{
PersonOutput(p);
p = p->next;
}
}
else
{
puts("目前还没上传成绩,请等待教务处通知^_^");
}
}
// 添加学生信息
void GradeAppend(GRADE
grade, const PERSON person)
{
PERSON
s;
s = (PERSON*)malloc(sizeof(PERSON));
s->id = person->id;
strcpy(s->name,person->name);
s->math = person->math;
s->chinese = person->chinese;
s->english = person->english;
s->physics = person->physics;
s->chemistry = person->chemistry;
s->biology = person->biology;
s->sum = person->sum;
s->next = grade->head->next;
grade->head->next = s;
grade->length++;
}

// 写成绩表
void GradeWrite(const char filename, const GRADE grade)
{
PERSON p = grade->head->next;
FILE
file = fopen(filename, "w");
if (file)
{
fprintf(file, "%d\n", grade->length);
while (p)
{
PersonWrite(file, p);
p = p->next;
}
fclose(file);
}
}

// 读成绩单
void GradeRead(const char filename, GRADE grade)
{
PERSON p, q;
FILE file = fopen(filename, "r");
q = grade->head;
if (file)
{
fscanf(file, "%d%
c", &grade->length);
while (!feof(file))
{
p = (PERSON)malloc(sizeof(PERSON));
PersonRead(file, p);
p->next = q->next;
q->next = p;
q = q->next;
}
q->next = NULL;
fclose(file);
}
}
// 查找个人学号
int GradeFind(const GRADE
grade, const int id)
{
int k = 0, loop = 1;
PERSON *p = grade->head->next;
while (p && loop)
{
if (p->id == id)
{
loop = 0;
}
k++;
p = p->next;
}
k = k <= grade->length ? k : 0;
return k;
}

// 输出个人信息
void GradeOutputPerson(const GRADE grade, int x)
{
int i;
PERSON
p = grade->head;
for (i = 0; i < x; i++)
{
p = p->next;
}
PersonOutput(p);
}
//排序
void GradeSort(GRADE grade)
{
PERSON
h = grade->head->next, s, p, q;
grade->head->next = NULL;
while (h)
{
s = h;
h = s->next;
p = grade->head;
q = p->next;
while (q && s->sum < q->sum)
{
p = q;
q = p->next;
}
p->next = s;
s->next = q;
}
}
//修改
void GradeModify(GRADE
grade, int x)
{
int i;
PERSON *p = grade->head;
for (i = 0; i < x; i++)
{
p = p->next;
}
PersonModify(p);
}
Person.h
#ifndef _Personh
#define _personh

void SelectAll();
void SelectId();
void SelectChinese();
void SelectMath();
void SelectEnglish();
void SelectPhysics();
void SelectChemistry();
void SelectBiology();
void SelectSum();
int SelectCol();

// 定义单链表结点类型
typedef struct PERSON
{
// 数据域
int id; //学号
char name[16]; // 姓名
int chinese, math, english, physics, chemistry, biology; // 学科
int sum;//总分
// 指针域
struct PERSON *next;
}PERSON;

//输入个人
void PersonInput(PERSON person);
//输出个人
void PersonOutput(const PERSON
person);
// 写个人成绩
void PersonWrite(FILE file, const PERSON person);
// 读个人成绩
void PersonRead(FILE file, PERSON person);
//修改个人数据
void PersonModify(PERSON *person);

#endif
Person.c
#ifndef
#include <stdio.h>
#include <string.h>
#include "Person.h"

static int col;

void SelectAll()
{
col = 0;
}

void SelectId()
{
col = 1;
}

void SelectChinese()
{
col = 2;
}

void SelectMath()
{
col = 3;
}

void SelectEnglish()
{
col = 4;
}

void SelectPhysics()
{
col = 5;
}

void SelectChemistry()
{
col = 6;
}

void SelectBiology()
{
col = 7;
}

void SelectSum()
{
col = 8;
}

int SelectCol()
{
int t;
printf("1-学号 2-语文 3-数学 4-英语 5-物理 6-化学 7-生物 8-总分 > ");
scanf(" %d", &t);
if (t > 0 && t < 9)
{
col = t;
}
}
//输入个人成绩
void PersonInput(PERSON person)
{
printf("学号:");
scanf("%d%
c", &person->id);
printf("姓名:");
gets(person->name);
printf("语文分数:");
scanf("%d%c", &person->chinese);
printf("数学分数:");
scanf("%d%
c", &person->math);
printf("英语分数:");
scanf("%d%c", &person->english);
printf("物理分数:");
scanf("%d%
c", &person->physics);
printf("化学分数:");
scanf("%d%c", &person->chemistry);
printf("生物分数:");
scanf("%d%
c", &person->biology);
person->sum = person->chinese + person->math + person->english + person->physics + person->biology + person->chemistry;
}

//输出个人成绩
void PersonOutput(const PERSON *person)
{
printf("%-6d %-6s %-3d %-3d %-3d %-3d %-3d %-3d %-3d\n", person->id, person->name
, person->chinese, person->math, person->english, person->physics, person->chemistry, person->biology, person->sum);
}

// 写个人成绩
void PersonWrite(FILE file, const PERSON person)
{
fprintf(file, "%d\n", person->id);
fprintf(file, "%s\n", person->name);
fprintf(file, "%d\n",person->chinese);
fprintf(file, "%d\n",person->math);
fprintf(file, "%d\n",person->english);
fprintf(file, "%d\n",person->physics);
fprintf(file, "%d\n",person->chemistry);
fprintf(file, "%d\n",person->biology);
if (person->next != NULL)
{
fprintf(file, "%d\n",person->sum);
}
else
{
fprintf(file, "%d",person->sum);
}
}

// 读个人成绩
void PersonRead(FILE file, PERSON person)
{
int n;
char s[1000];
fscanf(file, "%d%c", &person->id);
fgets(s, 1000, file);
n = strlen(s);
s[n - 1] = ‘\0‘;
strcpy(person->name, s);
fscanf(file, "%d%
c", &person->chinese);
fscanf(file, "%d%c", &person->math);
fscanf(file, "%d%
c", &person->english);
fscanf(file, "%d%c", &person->physics);
fscanf(file, "%d%
c", &person->chemistry);
fscanf(file, "%d%*c", &person->biology);
fscanf(file, "%d", &person->sum);
}

//修改个人数据
void PersonModify(PERSON person)
{
int t;
do
{
printf("1-学号 2-语文 3-数学 4-英语 5-物理 6-化学 7-生物 8-姓名 0-退出 > \n请输入修改信息的代号:");
scanf(" %d", &t);
if (t >= 0 && t <= 8)
{
switch (t)
{
case 1:
printf("学号修改为:");
scanf(" %d%
c", &person->id);
break;
case 2:
printf("语文成绩修改为:");
scanf(" %d%c", &person->chinese);
break;
case 3:
printf("数学成绩修改为:");
scanf(" %d%
c", &person->math);
break;
case 4:
printf("英语成绩修改为:");
scanf(" %d%c", &person->english);
break;
case 5:
printf("物理成绩修改为:");
scanf(" %d%
c", &person->physics);
break;
case 6:
printf("化学成绩修改为:");
scanf(" %d%c", &person->chemistry);
break;
case 7:
printf("生物成绩修改为:");
scanf(" %d%
c", &person->biology);
break;
case 8:
printf("姓名修改为:");
gets(person->name);
}
person->sum = person->chinese + person->math + person->english + person->physics + person->biology + person->chemistry;
}
else
{
puts("请输入正确的代号^_^");
}
}while (t != 0);
}

原文地址:https://blog.51cto.com/14301832/2382972

时间: 2024-12-10 19:14:19

学生成绩管理项目的相关文章

团队-学生成绩管理-项目总结

成员介绍 团队名称:干饭沈师 团队成员:刘爽,郎项羽,宋世平,宝港凯.宫佳良.李明赟 项目总结 总体来说这不算一个真正意义上的项目.但是这个项目的开发过程中,我们还存在很多的问题 没有头脑风暴,不能够拓展新的功能 团队合作力还是比较差的 没有参照其他同等项目没有自己的亮点

C语言文件实现学生成绩管理

C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文件,然后将数据读入内存,再允许用户的操作. 程序简示图 功能介绍 1. 加密数据: 程序结束时,现将生成的链表,写入二进制的临时文Temp.dat,再运用加密函数,将Temp.dat加密到文件Data.dat(就相当于数据库),并删除文件Temp.dat.程序开始运行时,先获取文件Data.dat的

学生成绩管理后台第二项任务:初步建模,搭建一个简单的网站

负责人:程琳茹 合伙人:李玉婷 签约员工:闫玉荣 前言:学生成绩管理后台,看起来是一个简单的项目,但是对于我们今后的发展很重要,建设一个管理后台有很多方法,这里我们主要使用Rstudio,在之后的文章中,会详细给出我们小组完成项目的过程与遇到的问题,欢迎大家借鉴,此外,同学们要积极参与讨论. 项目步骤:1.熟悉与安装Rstudio,并且配置好R内部环境. 2.建立好文件所存放的位置与确保文档可以正常使用. 3.搭建一个简单的网站,分别分为server.R端口与ui.R端口. 4.搭建好网站后,插

干翻沈师-学生成绩管理-开发环境搭建过程

项目技术 学生成绩管理平台,采用web页面的显示模式,使用前后端分离技术.前端(vue.js)用于数据显示,后端服务(Python)进行数据的技术 前端 使用技术 目的 iview 使用组件化布局,方便前端页面的展示 axios 处理http请求用于与后端服务请求数据 echart.js 图表库,用于折线图,饼图等图表的展示 后端 使用技术 目的 flask Python的轻量级web开发框架,用于写restful api进行数据的请求 pandas 处理csv文件的模块,计算查询结果 开发环境

学生成绩管理C语言版

[标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数据和5组有问题的数据,查看程序能否运行正确 [测试结果]基本功能运行正确,异常输入无法处理(关于性能对比测试,查看C++版:http://www.cnblogs.com/forerve/p/3908716.html) [详细设计] 1 #include<stdio.h> 2 #include<

成绩管理项目现阶段总结

成绩管理项目也是后来新加入的,开始考虑到自己进度没有进入ITOO,他们1.0马上要结束的时候我们开始了,自己阴差阳错的做了组长,开始参与每天.NET系统晨会,每天结束问我们各系统有什么问题时,我基本都是摇头,几乎完全不知道他们在讲什么,问题太多以至于都不知道怎么问他们.听的最多的就是:我们都是这样一步步过来的. 原型阶段还是九期师哥带着,因为没有指定的负责人带我们,开始真是茫然,跟我们一起开始的系统都说没有用户需求都是自己来确定简直是挑战,我想说的是我们有用户,用户需求也比较简单,不过加上米老师

上个月C++课程设计做的一个《学生成绩管理和选课系统》

分享下代码.冗余的代码比较多.比较重要的部分有注释. 采用文件方式保存数据,需要先在D盘建立三个“表”,即是txt文件,分别是student.txt,teacher.txt,course.txt. 其中teacher.txt,中要预先存入一组数据,如下 教师id 姓名 密码 1 大明 123123 然后编译运行程序,选择教师登录,用上面的id和密码登录就可以进行学生的增删改查操作了. 下面贴代码,功能就看main()函数的菜单吧,懒得详述了... #include <iostream> #in

《团队-学生成绩管理-需求分析》

学生成绩管理系统--需求分析 开发意图: 采用学生成绩管理系统,可以方便地对学生和学生成绩进行管理. 用户特点: 本系统的最终用户只有一个:管理员.系统的管理员主要是对学生信息以及 学生成绩进行一些操作. 这些操作包括对学生信息的添加. 对学生成绩的录入以 及对学生成绩进行分析等. 可行性分析: 目前, 随着办公信息化的开展, 高校的扩招, 新生入学以及期末考试结束后,学校都需 要对一些繁琐的流程进行管理, 通过一个基于 B/S 架构的管理系统, 可以很好的将这一个过 程进行化繁为简. 此项目具

团队博客(五):学生成绩管理系统设计类图

系统功能图 学生用例图 教师用例图 教师通过成绩管理可进行成绩的录入并查看学生成绩,通过教学管理可进行历年数据查询和个人课表查询等,通过用户管理可以查看个人基本信息和注销登录.修改密码. 管理员用例图 可进行选课管理.成绩管理.教学管理.课程管理和系统设置.用户管理. 实体类图 边界类图 学生序列图 教师序列图 管理员序列图 学生状态图 管理员状态图 教师状态图 学生活动图 管理员活动图 教师活动图