精华内容
下载资源
问答
  • 软件工程 学生成绩管理系统 软件工程 学生成绩管理系统
  • 非常有用的一个东西,是学生们经常要用到的,希望多给点分
  • 学生成绩管理系统:这是一篇从需求分析、概要设计、详细设计和测试的文档,是属于软件工程范畴。
  • 软件工程实验报告_学生成绩管理系统
  • 这是一个用rational rose设计的软件工程设计模板,包括开发软件的工程中所需的各个文档,设计的软件为学生成绩管理系统
  • 学生成绩管理系统 需求分析软件工程报告,内容详实具体
  • 该文档实用于大学学生计算机科学与技术专业的软件工程课程设计,题目为学生成绩管理系统,格式为PPT。
  • 学生成绩管理系统 编码与测试软件工程报告,内容完整具体,内含完整代码
  • 软件工程实验报告——《学生成绩管理系统
  • 学校的软件工程实践课程大作业,包括可行性分析报告等,一堆文档。
  • 学生成绩管理系统 详细设计与概要设计软件工程报告,信息丰富,内容完整
  • 学生成绩管理系统软件工程实验报告,包括需求分析,总体设计,详细设计等等。
  • 软件工程课程设计-学生成绩管理系统-演示文档
  • 该生按照课程考核模板要求,选取学习成绩管理系统进行了分析与设计。该系统主要面向教学管理用户,主要有学生查询、教师输入考试信息、辅导员查询导出学生成绩、教务处统计分析综合成等几个功能模块,基本功能已经...
  • 软件工程课程设计报告_学生成绩管理系统的结构化分析
  • 软件工程 学生管理系统 实验报告 有用例图 顺序图 流程图 协作图。很完整的一份软件工程思想的实验报告。 1 设计任务与目的 1 1.1 项目计划 1 2 需求分析 1 2.1用例图 3 2.1.1 学生用例图 3 2.1.2 教师用例图 3 ...
  • 软件工程学籍管理系统的作业(概要设计说明书+学籍管理系统结构化图+学生成绩管理结构分析)
  • 软件工程项目学生管理系统

    千次阅读 2020-05-06 09:59:22
    软件工程项目 学生管理系统 专业: 姓名: 年级: 学号 : 目录 1 设计任务与目的 3 1.1 项目计划 3 2 需求分析 3 2....

    软件工程项目

    学生管理系统

    专业: 姓名: 年级: 学号 :

    目录
    1 设计任务与目的 3
    1.1 项目计划 3
    2 需求分析 3
    2.1用例图 5
    2.1.1 学生用例图 5
    2.1.2 教师用例图 6
    2.1.3 管理员用例图 6
    2.2类图 7
    2.3 顺序图 7
    2.31 管理员修改课程信息顺序图 7
    2.32 学生用户退选课的顺序图 8
    2.33 教师提交成绩顺序图 8
    2.4 协作图 9
    2.41 学生用户选课协作图 9
    2.42 教师提交成绩协作图 10
    2.43 学生查询成绩协作图 10
    2.5运行环境规定 10
    2.51设备 10
    3 系统设计 11
    3.1 设计子系统 11
    3.11总体设计图 11
    3.12各模块功能 11
    3.2数据库表结构 12
    3.21学生表Student的详细数据字段 12
    3.22教师表Teacher的详细数据字段 12
    3.23课程表Course的详细数据字段 12
    3.24选课表Elect的详细数据字段 13
    3.25系统管理员表Users的详细数据字段 13
    3.26系院表Depart的详细数据字段 13
    3.3 设计人机交互子系统 13
    3.31用户分类 13
    3.32用户描述 13
    3.33设计命令层次 14
    4详细设计 14
    4.1系统用户登录流程图 15
    4.2 用户密码修改流程图 15
    4.3教师提交成绩流程图 16
    4.4管理员添加课程流程图 16
    4.5学生选修课程流程图 17
    4.6查询成绩流程图 17
    5系统实现 17
    5.1 登录界面 18
    5.2 教师提交成绩界面 18
    5.3 学生查询成绩和选课界面 18
    5.4 管理员登录界面 19
    6系统测试 19
    7 总结 20
    8 附录(主要程序代码) 20

    1 设计任务与目的
    《软件工程》课程是本专业中实践性非常强的一门课程。本课程的目的是培养软件工程应用能力。软件工程实践是《软件工程》课程的后继教学环节,是一个重要的、不可或缺的实践环节。其目的是使学生能够针对具体软件工程项目,全面掌握软件工程管理、软件需求分析、软件设计、软件测试等阶段的方法和技术,通过该实践课程使学生进一步理解和掌握软件开发模型、软件生命周期、软件过程等理论在软件项目开发过程中的意义和作用,培养学生按照软件工程的原理、方法、技术、标准和规范,进行软件开发的能力,培养学生的合作意识和团队精神,培养学生对技术文档的编写能力,从而使学生提高软件工程的综合能力,提高软件项目的管理能力。
    1.1 项目计划

    2 需求分析
    学生管理系统主要满足来自三方面的需求,这三个方面分别是学生用户、教师用户和管理员用户,也即是三类用户角色。
    (1)学生用户是主要的需求者,主要需求功能是查询成绩、查看自己选课情况及进行选课、退课操作等;
    (2)教师用户主要需求功能是提交成绩、查询学生成绩、查看自己所教授的课程、课程有哪些学生选修;
    (3)管理员用户的功能需求较为复杂,包括对学生信息、教师信息、课程信息进行管理。在学生信息管理子模块中,实现对学生信息的添加、修改、删除操作,还可以输入查询条件进行查询操作。在教师管理子模块中,实现对教师信息的添加、修改、删除、查询等操作。在课程管理子模块中,实现对课程信息的添加,添加时为其分配任课教师、上课时间和地点,实现对课程的修改、删除、查看某个课程的详细信息等。
    本系统将管理员用户、教师用户、学生用户的身份及权限进行严格的划分,让管理员拥有最高权限,可以查看、维护系统中的所有信息,如添加学生,添加课程,修改课程信息等;让教师拥有查看自己开设的课程的信息,以及提交所开设课程成绩的权限;让学生拥有查询成绩、选课和退选的权限;而修改密码模块的权限每个用户都可拥有,用以修改自己的密码信息。通过进行严格的权限划分,可以更好地进行管理,也可更好地保护用户信息安全。

    表2-1 查询成绩用例的事件流图
    用例名称 查询成绩
    参与者 教师、学生
    描述 学习可查看自己所有课程成绩,教师可查询自己所教的课程的所有学生成绩
    启动 学生登录点击“成绩管理”链接,教师点击“查询成绩”
    前置条件 用户登录成功
    主流事件
    用户 系统
    •学生进入成绩管理界面,显示自己的所有选课成绩。
    教师进入成绩管理界面,查看所授课程的学生成绩
    2、系统显示查询成绩结果

    表2-2 修改密码用例的正常事件流图和异常事件流图
    用例名称 修改密码
    参与者 管理员、教师、学生
    描述 管理员、教师、学生用户进行密码修改
    启动 单击“修改密码”链接
    前置条件 用户成功登录
    主事件流
    用户 系统
    1.进入用户修改密码界面,输入旧密码一次,新密码两次(起到验证作用)
    2.系统检查密码格式是否相符
    3.系统检查旧密码是否正确
    4.如果正确,进行密码修改,转入密码修改成功界面
    异常流
    异常流 密码检查未通过
    系统 返回密码修改界面,提示旧密码不正确,新密码格式不符,两次不同等密码
    异常 用户旧密码错误

    表2-3 提交成绩用例的正常事件流图和异常事件流图
    用例名称 提交成绩用例
    参与者 教师用户
    描述 提交选自己开设课程的学生的成绩
    启动 进入提交成绩界面
    前置条件 用户成功登录
    后置条件 尚未提交过成绩
    主事件流
    用户 系统
    1.单击提交成绩
    2.系统提交成绩页面
    3.填写学生成绩,单击提交成绩
    5.更新学生成绩,提示提交成功
    异常流
    异常流 用户已经提交过该门课程成绩
    系统 提示该课程成绩已提交,不能再次提交
    2.1用例图
    2.1.1 学生用例图

    2.1.2 教师用例图

    2.1.3 管理员用例图

    2.2类图

    2.3 顺序图

    2.31 管理员修改课程信息顺序图

    图2-3 管理员修改课程信息顺序图

    2.32 学生用户退选课的顺序图

    图2-4 学生用户退选课的顺序图

    2.33 教师提交成绩顺序图

    图2-5 教师提交成绩顺序图
    2.4 协作图

    2.41 学生用户选课协作图

    2-6 学生用户选课协作图

    2.42 教师提交成绩协作图

    2.43 学生查询成绩协作图

    2.5运行环境规定
    2.51设备
    处理器: AMD4800+以上 数据库系统: SQL Server2000
    内存: 256M以上 开发工具: Visual Studio 2005
    Web服务器: IIS+ASP.NET 2.0平台
    3 系统设计
    3.1 设计子系统
    学生管理系统是实现学生成绩查询、选课退课、教师提交成绩以及学校教务管理员维护信息的一个平台,整个学生选课系统有前台和后台两部分,共分为4个模块:管理员模块,教师模块,学生模块和公有模块,分别用于完成各自的功能。以下为学生选课系统总体设计图和各功能模块说明:
    3.11总体设计图

    3.12各模块功能
    表3-1 学生选课系统功能模块表
    功能模块 包含子功能模块 功能
    管理员模块 学生管理子模块 对学生信息的添加、修改,删除操作
    教师管理子模块 对教师的添加,修改,删除,查询操作
    课程管理子模块 对课程的添加,添加时为其分配任课教师,上课时间和地点,实现对课程的修改,删除,查看某个课程的详细信息等
    教师模块 实现查看自己所教授的课程,课程有哪些学生选修、各学生的成绩以及利用本系统提交学生的成绩
    学生模块 实现学生选课,查询成绩,查看所选课程,修改自己的选课信息
    公有模块 实现用户的身份验证,密码修改,退出系统等功能
    3.2数据库表结构
    3.21学生表Student的详细数据字段
    表3-3 Student学生用户表
    序号 字段名 字段类型 说明 备注
    1 stuID nvarchar(20)not null 学生学号 主键
    2 stuPwd nvarchar(20)not nul 学生密码
    3 stuName nvarchar(20)not nul 学生姓名
    4 stuDepart Int 学生系院号
    5 stuGrade int 学生年级
    6 stuClass int 学生班级

    3.22教师表Teacher的详细数据字段
    表3-4 Teacher教师用户表
    序号 字段名 字段类型 说明 备注
    1 teaID nvarchar(20)not null 教师编号 关键字
    2 teaPwd nvarchar(20)not null 教师密码
    3 teaName nvarchar(100)not null 教师姓名
    4 teaDepart Int(4) 教师系院号
    3.23课程表Course的详细数据字段
    表3-5 Cource课程信息表
    序号 字段名 字段类型 说明 备注
    1 courseID nvarchar(20)not null 课程编号 关键字
    2 teaID nvarchar(20)not null 教师编号 关键字
    3 courseName nvarchar(100) not null 课程名称
    4 courseTime nvarchar(20) 上课时间
    5 courseAddress nvarchar(50) 上课地点
    6 courseInfo Text 课程简介
    3.24选课表Elect的详细数据字段
    表3-6 Elect选课信息表
    序号 字段名 字段类型 说明 备注
    1 stuID nvarchar(20)not null 学生学号 关键字
    2 courseID nvarchar(20)not null 课程编号 关键字
    3 teaID nvarchar(20)not null 教师编号 关键字
    4 Score int 课程成绩
    3.25系统管理员表Users的详细数据字段
    表3-7 Users管理员表
    序号 字段名 字段类型 说明 备注
    1 adminName nvarchar(20)not null 系统管理员用户名 关键字
    2 adminPwd nvarchar(20) 系统管理员密码
    3.26系院表Depart的详细数据字段
    表3-8 Depart系院表
    序号 字段名 字段类型 说明 备注
    1 departID Int not null 系院号 关键字
    2 departName nvarchar(100) 系院名称
    3.3 设计人机交互子系统
    3.31用户分类
    本系统的用户可分为三类:
    (1) 管理员用户;
    (2) 教师用户;
    (3) 学生用户。
    3.32用户描述
    (1)管理员用户的描述:
    管理员用户在整个选课系统中起到管理和维护的作用,对学生和教师的信息进行管理和维护以及开设课设等职责。
    (2) 教师用户的描述:
    教师用户在本系统中具有管理选修了自己开设的课程的学生的权限,查看选修了自己开设课程的学生信息、成绩以及提交学生成绩。
    (3)学生用户的描述:
    选课系统主要是针对管理学生的,学生在本系统中具有修改自己的信息,查看自己的成绩以及选课和退选的功能。
    3.33设计命令层次
    ①系统的人机交互子系统的内容和准则:
    本学生选课系统的人机交互子系统在根据不同的用户身份登陆到不同的页面,然后按照不同的用户只能进行用户权限内的操作,其结构图如下:

    ②通过采用树形结构,细化命令的组织方式,如下:

    4详细设计
    学生选课系统是实现学生网上查询成绩、选课,教师查询成绩、提交成绩以及学校教务管理员维护信息的一个平台,整个学生选课系统共分为4个大模块:管理员模块,教师模块,学生模块和公有模块,其中复杂的方法和模块的详细设计流程图如下。
    4.1系统用户登录流程图

    4.2 用户密码修改流程图

    4.3教师提交成绩流程图

    4.4管理员添加课程流程图

    4.5学生选修课程流程图

    4.6查询成绩流程图

    5系统实现
    本系统采用了三层架构来实现,即分为用户界面层(UI)、业务逻辑层(BLL)和数据访问层(DAL),用户界面层是展示给用户的界面,方便用户与系统进行交互;业务逻辑层是对系统业务实体的封装,完成系统业务功能;数据访问层直接与数据库打交道,为业务逻辑层提供底层的数据库操作。
    5.1 登录界面

    图5-1系统登录页面
    5.2 教师提交成绩界面

    5.3 学生查询成绩和选课界面

    5.4 管理员登录界面

    6系统测试
    在系统测试中,我们首先对各个子模块进行单元测试,即把每一个模块作为一个单独的实体来测试,保证每个模块作为一个单元能正确运行。然后在完成所有模块后,我们将各子模块集成起来,再对它进行系统测试,找出系统设计或编码上的错误,以及验证系统是否实现了指定的功能。最后找几个其他的同学再对系统进行黑盒子测试,验证系统是否满足用户的功能需求。
    在测试的过程,特别是在集成测试之后,发现了许多问题及功能缺陷,最后经过修改调试后都解决了。比如,有一个问题是,在删除教师用户之后,系统里还剩有许多与该教师有关的冗余记录,造成系统混乱。在进行了分析之后,发现是因为在删除教师用户时,没有对与他所关联的记录进行删除造成的,在添加了对其关联记录的级联删除之后,问题得到了解决。
    7 总结
    •通过这次软件工程课程设计的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
    •学习和实践了分析和设计软件系统的各种知识,包括面向对象的系统分析与设计,编码和测试方面的知识。
    •加深掌握了.Net平台的三层架构模式设计。
    •进一步加强和提高软件工程文档的编写能力。
    •增强了协作能力和团队精神。
    •本系统基本实现了关键的功能模块,在功能上基本满足了用户的需求,但是由于时间较紧,有些模块以及整个系统还有许多不完善的地方,如界面不太美观,操作性不太友好等。
    8 附录(主要程序代码)
    参考文献:《软件工程》、《.net开发实例》、《SQL server实用教程》
    Database类主要是与数据库连接,提供数据库操作功能代码
    namespace MyElectCourse.DAL
    {
    public class Database
    {
    protected string connectionString;
    protected SqlConnection connection = null;
    public Database()
    {
    connectionString = ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionString.ToString();
    }
    ~Database()
    {
    if (connection != null)
    {
    connection = null;
    }
    }
    protected void Open()
    {
    if (connection == null)
    {
    connection = new SqlConnection(connectionString);
    }
    if (connection.State.Equals(ConnectionState.Closed))
    {
    connection.Open();
    }
    }
    protected void Close()
    {
    if (connection != null)
    {
    connection.Close();
    }
    }
    public int ExecuteSQL(string sqlstr)
    {
    int count = -1;
    this.Open();
    SqlCommand cmd = new SqlCommand(sqlstr, connection);
    count = cmd.ExecuteNonQuery();
    this.Close();
    return count;
    }
    public DataSet GetDataSet(string sqlstr)
    {
    this.Open();
    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter(sqlstr,connection);
    adapter.Fill(ds);
    this.Close();
    return ds;
    }
    public DataTable GetDataTable(string sqlstr)
    {
    DataSet ds = this.GetDataSet(sqlstr);
    DataTable dt = new DataTable();
    if (ds.Tables.Count > 0)
    {
    dt = ds.Tables[0];
    }
    return dt;
    }
    public SqlDataReader GetDataReader(string sqlstr)
    {
    this.Open();
    SqlCommand cmd = new SqlCommand(sqlstr, connection);
    SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //this.Close();
    return sdr;
    }
    }
    }
    UserBase类是所有系统角色用户的基类,完成用户登录验证与修改密码的功能代码
    namespace MyElectCourse.BLL
    {
    public class UserBase
    {
    private string userID;
    public string UserID
    {
    get { return userID; }
    set { userID = value; }
    }
    private string userPSW;
    public string UserPSW
    {
    get { return userPSW; }
    set { userPSW = value; }
    }
    public string loginCheck(string uid, string upwd, string urole)
    {
    String selectStr = String.Empty;
    switch (urole)
    {
    case “0”: //身份为教师时
    selectStr = “Select * from Teacher where teaID = '” + uid + “’”;
    break;
    case “1”: //身份为学生时
    selectStr = “Select * from Student where stuID = '” + uid + “’”;
    break;
    case “2”: //身份为管理员时
    selectStr = “Select * from Users where adminName = '” + uid + “’”;
    break;
    default:
    return null;
    }
    Database db = new Database();
    DataTable dt = db.GetDataTable(selectStr);
    if (dt.Rows.Count > 0) //如果该用户存在
    {
    if (dt.Rows[0][1].ToString().Equals(upwd)) //密码正确
    {
    switch (urole)
    {
    case “0”: //身份为教师时
    return “0”;
    case “1”: //身份为学生时
    return “1”;
    case “2”: //身份为管理员时
    return “2”;
    default:
    return null;
    }
    }
    else //密码错误,给出提示信息!
    {
    return “-1”;
    }
    }
    else //用户不存在或用户名输入错误
    {
    return “-2”;
    }
    }
    public string modifyPWD(String urole, String uid, String oldPwd, String newPwd)
    {
    String updateStr = String.Empty;
    switch (urole)
    {
    case “0”: //身份为教师时
    updateStr = “update Teacher set teaPwd=’” + newPwd + “’ where teaID=’” + uid + “’”;
    break;
    case “1”: //身份为学生时
    updateStr = “update Student set stuPwd=’” + newPwd + “’ where stuID=’” + uid + “’”;
    break;
    case “2”: //身份为管理员时
    updateStr = “update Users set adminPwd=’” + newPwd + “’ where adminName=’” break;
    }
    string ucheck = this.loginCheck(uid, oldPwd, urole);
    if (ucheck.Equals(“0”) || ucheck.Equals(“1”) || ucheck.Equals(“2”))
    {
    int t = new Database().ExecuteSQL(updateStr); //根据修改后返回的结果给出提示
    if (t > 0)
    {
    return “1”;
    }
    else
    {
    return “0”;
    }
    }
    else
    {
    return “-1”;
    } } }}
    系统登录页面,代码及运行效果

    登录页面
    展开全文
  • C++学生成绩管理系统

    万次阅读 多人点赞 2016-06-03 23:59:17
    C++学生成绩管理系统小白疼疼目前是大二狗,虽然是学软件工程的,但确实是正经的C++小白……最近应一妹子请求帮忙写了下她C++选修课作业,看到网上巨多此类代码,在此也就湊表脸的把我写的代码贴上来,写得不好不怕...

    C++学生成绩管理系统

    小白疼疼目前是大二狗,虽然是学软件工程的,但确实是正经的C++小白……最近应一妹子请求帮忙写了下她C++选修课作业,看到网上巨多此类代码,在此也就湊表脸的把我写的代码贴上来,写得不好不怕喷请大家多多指教~

    需求描述

    1.添加学生信息:增加学生,并将学生信息和成绩添加到文件student.txt。
    2.修改学生信息;按学号调出学生信息和成绩,并做修改,修改后保存到student.txt。
    3.删除学生信息; 按学号调出学生信息和成绩,并从student.txt删除该学生信息。
    4.查询:1)按学号某个学生的成绩信息和学分信息;2)按课程查询某门课程的所有学生成绩。
    5.统计:1)按课程统计不及格学生;2)排序,按课程将某门课的成绩排序;3)按所有课程的总分排序。

    代码块

    Student.h:

    #pragma once
    
    # include <iostream>
    # include <fstream>
    # include <string.h>
    #include <conio.h>
    
    using namespace std;
    
    class Student
    {
    public:
        Student();
        ~Student();
    
        char name[20];      //名字
        char id;            //学号
        int MathScore;      //数学成绩
        int EnglishScore;   //英语成绩
        int ComputerScore;  //计算机成绩
        int PEScore;        //体育成绩
        int PoliticScore;   //政治成绩
        int sum;            //总分
    
        Student *Next;
    
        void Input();               //输入各种信息
        void ReadFile(istream &in); //写入各种信息
        void Show();                //显示各种信息
        void Show_Math();
        void Show_Eng();
        void Show_Com();
        void Show_PE();
        void Show_Pol();
    };
    
    

    Student.cpp

    #include "Student.h"
    
    
    
    Student::Student()
    {
    }
    
    
    Student::~Student()
    {
    }
    
    void Student::Input()
    {
        cout << "请输入学生的姓名:";  cin >> name;
        cout << "请输入学生的学号:";  cin >> id;
        cout << "请输入数学课的成绩:";  cin >> MathScore;
        cout << "请输入英语课的成绩:";  cin >> EnglishScore;
        cout << "请输入计算机课的成绩:";  cin >> ComputerScore;
        cout << "请输入体育课的成绩:";  cin >> PEScore;
        cout << "请输入政治课的成绩:";  cin >> PoliticScore;
        sum = MathScore + EnglishScore + ComputerScore + PEScore + PoliticScore;
    }
    
    void Student::ReadFile(istream & in)
    {
        in >> name >> id >> MathScore >> EnglishScore >> ComputerScore >> PEScore >> PoliticScore >> sum;
    }
    
    void Student::Show()
    {
        cout << "姓名:" << name << endl 
            << "学号:" << id << endl 
            << "数学:" << MathScore << endl
            << "英语:" << EnglishScore << endl 
            << "计算机:" << ComputerScore << endl 
            << "体育:" << PEScore << endl 
            << "政治:" << PoliticScore << endl
            << "总分:" << sum << endl
            << endl;
    }
    
    void Student::Show_Math()
    {
        cout << "姓名:" << name << endl
            << "学号:" << id << endl
            << "数学:" << MathScore << endl
            << endl;
    }
    
    void Student::Show_Eng()
    {
        cout << "姓名:" << name << endl
            << "学号:" << id << endl
            << "英语:" << EnglishScore << endl
            << endl;
    }
    
    void Student::Show_Com()
    {
        cout << "姓名:" << name << endl
            << "学号:" << id << endl
            << "计算机:" << ComputerScore << endl
            << endl;
    }
    
    void Student::Show_PE()
    {
        cout << "姓名:" << name << endl
            << "学号:" << id << endl
            << "体育:" << PEScore << endl
            << endl;
    }
    
    void Student::Show_Pol()
    {
        cout << "姓名:" << name << endl
            << "学号:" << id << endl
            << "政治:" << PoliticScore << endl
            << endl;
    }
    

    Studentmassage.h

    #pragma once
    
    # include <iostream>
    # include <fstream>
    # include <string.h>
    #include <conio.h>
    #include<sstream>
    
    #include"Student.h"
    #include"Course.h"
    
    using namespace std;
    
    class Studentmassage
    {
    public:
        Studentmassage();
        ~Studentmassage();
    
        void Display();                     //显示信息
        void Display_Math();                //显示数学成绩信息
        void Display_Eng();                 //显示英语成绩信息
        void Display_Com();                 //显示计算机成绩信息
        void Display_PE();                  //显示体育成绩信息
        void Display_Pol();                 //显示政治成绩信息
    
        void AddItem();                     //添加信息
        void Save();                        //保存当前数据
        void ModifyItem();                  //修改学生信息
        void RemoveItem();                  //删除学生信息
        void Swap(Student *p1, Student *p2);//交换信息位置函数
        int ListCount();                    //统计当前链表记录数目并返回
    
        void Sort();                        //按总成绩排序
        void Sort_Math();
        void Sort_Eng();
        void Sort_Com();
        void Sort_PE();
        void Sort_Pol();
    
        void Main_Menu();                   //主菜单
        void Stu_Info_Menu();               //学生信息菜单
        void Search_Menu();                 //查询菜单
        void Grade_Menu();                  //课程选择菜单
        void Sort_Menu();                   //统计菜单
        void SortbyGrade();                 //按课程成绩排序选择菜单
    
        void Find();                        //按学号查找学生信息
        void Find_fail();                   //查找不及格学生
    
        //void read();                      //脑残出品…别管它…
    
    
    private:
        Student *Head, *End;
        ifstream in;
        ofstream out;
    
        Student *FindId(char *id) {
            for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
                if (!p->Next->id, id)return p;
            return NULL;
        };
        Student *FindItem(char *name) {
            for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
                if (!strcmp(p->Next->name, name))return p;
            return NULL;
        };
    
        Student *FindFail() {
            for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
                if (p->sum < 300)return p;
            return NULL;
        }
    
    };

    Studentmassage.cpp

    #include "Studentmassage.h"
    
    
    
    Studentmassage::Studentmassage()
    {
        Head = new Student;
        Head->Next = new Student;
        End = Head->Next;
        in.open("student.txt");
        if (!in)
            cout << "这是一个新系统,无学生信息。请先输入。" << endl;
        else
        {
            while (!in.eof())
            {
                End->ReadFile(in);
                if (End->name[0] == '\0')break;
                End->Next = new Student;
                End = End->Next;
            }
            in.close();
            cout << "读取学生信息成功!" << endl;
        }
    }
    
    
    Studentmassage::~Studentmassage()
    {
        Save();
        for (Student * temp; Head->Next != End;)
        {
            temp = Head->Next;
            Head->Next = Head->Next->Next;
            delete temp;
        }
        delete Head, End;
    }
    
    void Studentmassage::Display()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Display_Math()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show_Math();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Display_Eng()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show_Eng();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Display_Com()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show_Com();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Display_PE()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show_PE();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Display_Pol()
    {
        for (Student * p = Head->Next; p != End; p = p->Next)
            p->Show_Pol();
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::AddItem()
    {
        End->Input();
        End->Next = new Student;
        End = End->Next;
        cout << "添加成功!" << endl;
        cout << "输入任意字符!继续……";
        _getch();
    }
    
    void Studentmassage::Main_Menu()
    {
        cout << "***********主菜单************" << endl;
        cout << "\t1.学生信息" << endl;
        cout << "\t2.成绩查询" << endl;
        cout << "\t3.成绩统计" << endl;
        cout << "\t4.退出" << endl;
        cout << "***********主菜单************" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::Stu_Info_Menu()
    {
        cout << "********学生信息*********" << endl;
        cout << "\t1.显示当前学生信息" << endl;
        cout << "\t2.添加学生" << endl;
        cout << "\t3.按学号查找学生信息" << endl;
        cout << "\t4.修改学生信息" << endl;
        cout << "\t5.删除学生信息" << endl;
        cout << "********学生信息*********" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::Search_Menu()
    {
        cout << "********成绩查询*********" << endl;
        cout << "\t1.按学号某个学生的成绩信息" << endl;
        cout << "\t2.按课程查询某门课程的所有学生成绩" << endl;
        cout << "********成绩查询*********" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::Grade_Menu()
    {
        cout << "********按课程查询*********" << endl;
        cout << "\t1.数学" << endl;
        cout << "\t2.英语" << endl;
        cout << "\t3.计算机" << endl;
        cout << "\t4.体育" << endl;
        cout << "\t5.政治" << endl;
        cout << "********成绩查询*********" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::Sort_Menu()
    {
        cout << "********成绩统计*********" << endl;
        cout << "\t1.统计不及格学生" << endl;
        cout << "\t2.排序,按课程将某门课的成绩排序" << endl;
        cout << "\t3.按所有课程的总分排序" << endl;
        cout << "********成绩统计*********" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::SortbyGrade()
    {
        cout << "********请选择课程*********" << endl;
        cout << "\t1.数学" << endl;
        cout << "\t2.英语" << endl;
        cout << "\t3.计算机" << endl;
        cout << "\t4.体育" << endl;
        cout << "\t5.政治" << endl;
        cout << "********请选择课程*********" << endl;
        cout << "请选择:";
    }
    
    void Studentmassage::Find()
    {
        char id[3];
        Student * p = NULL;
    
        cout << "按学生学号查找";
    
        cout << "请输入要查找的学生的学号:"; cin >> id;
        if (p = FindId(id))
        {
            p->Next->Show();
            cout << "输入任意字符!继续……";
            _getch();
        }
        else
        {
            cout << "没有找到该学号的学生!" << '\n' << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
    }
    
    void Studentmassage::Find_fail()
    {
        Student *p = NULL;
        if (p = FindFail())
        {
            p->Next->Show();
            cout << "输入任意字符!继续……";
            _getch();
        }
        else
        {
            cout << "没有找到该学号的学生!" << '\n' << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
    }
    
    
    /*脑残了……写了另一个读取文件的函数
    void Studentmassage::read()
    {
        ifstream ifsAddr("student.txt");
        stringstream strStream;
        Student *p = Head->Next;
    
        string strTemp;
    
        if (!ifsAddr) {
            cout << "读取文件失败!!" << endl;
            system("pause");
            _getch();
        }
        while (ifsAddr.good()&&!ifsAddr.eof())
        {
            //for (Student *p = Head->Next; p != End; p = p->Next)
            getline(ifsAddr, strTemp, '\n');
            strStream.clear();
            strStream.str(strTemp);
            strStream >> p->name 
                >> p->id 
                >> p->MathScore 
                >> p->EnglishScore 
                >> p->ComputerScore 
                >> p->PEScore 
                >> p->PoliticScore;
    
            cout << "学号:" << p->name << endl
                << "姓名:" << p->id << endl
                << "数学:" << p->MathScore << endl
                << "英语:" << p->EnglishScore << endl
                << "计算机:" << p->ComputerScore << endl
                << "体育:" << p->PEScore << endl
                << "政治:" << p->PoliticScore << endl
                << endl;
    
            if (p != End) { p = p->Next; }
    
            if (strStream.fail())
                continue;
        }
    }
    */
    
    void Studentmassage::Save()
    {
        out.open("student.txt");
        for (Student *p = Head->Next; p != End; p = p->Next)
            out << p->name << "\t" 
                << p->id << "\t" 
                << p->MathScore << "\t"
                << p->EnglishScore << "\t" 
                << p->ComputerScore << "\t" 
                << p->PEScore <<"\t"
                << p->PoliticScore << '\t'
                << p->sum << '\n';
        out.close();
    }
    
    void Studentmassage::ModifyItem()
    {
        char name[20];
        Student * p = NULL;
        cout << "\t\t请输入要修改的人的姓名:"; cin >> name;
        if (p = FindItem(name))
        {
            cout << "\t\t已找到学生的信息,请输入新的信息!" << endl;
            p->Next->Input();
            cout << "修改成功!" << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
        else
        {
            cout << "\t\t没有找到!" << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
    }
    
    void Studentmassage::RemoveItem()
    {
        char name[20];
        Student * p = NULL, *temp = NULL;
        cout << "\t\t请输入要删除的学生的姓名:" << endl; cin >> name;
        if (p = FindItem(name))
        {
            temp = p->Next;
            p->Next = p->Next->Next;
            delete temp;
            cout << "\t\t删除成功!" << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
        else
        {
            cout << "\t\t没有找到!" << endl;
            cout << "输入任意字符!继续……";
            _getch();
        }
    }
    
    void Studentmassage::Swap(Student *p1, Student *p2)
    {
        Student *temp = new Student;
    
        temp->id = p1->id;
        strcpy_s(temp->name, p1->name);
        temp->MathScore = p1->MathScore;
        temp->EnglishScore = p1->EnglishScore;
        temp->ComputerScore = p1->ComputerScore;
        temp->PEScore = p1->PEScore;
        temp->PoliticScore = p1->PoliticScore;
        temp->sum = p1->sum;
    
        p1->id = p2->id;
        strcpy_s(p1->name, p2->name);
        p1->MathScore = p2->MathScore;
        p1->EnglishScore = p2->EnglishScore;
        p1->ComputerScore = p2->ComputerScore;
        p1->PEScore = p2->PEScore;
        p1->PoliticScore = p2->PoliticScore;
        p1->sum = p2->sum;
    
        p2->id = temp->id;
        strcpy_s(p2->name, temp->name);
        p2->MathScore = temp->MathScore;
        p2->EnglishScore = temp->EnglishScore;
        p2->ComputerScore = temp->ComputerScore;
        p2->PEScore = temp->PEScore;
        p2->PoliticScore = temp->PoliticScore;
        p2->sum = temp->sum;
    
    }
    
    void Studentmassage::Sort()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->sum>k->sum)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    void Studentmassage::Sort_Math()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->MathScore>k->MathScore)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    void Studentmassage::Sort_Eng()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->EnglishScore>k->EnglishScore)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    void Studentmassage::Sort_Com()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->ComputerScore>k->ComputerScore)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    void Studentmassage::Sort_PE()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->PEScore>k->PEScore)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    void Studentmassage::Sort_Pol()
    {
        cout << "Sorting..." << endl;
        Student *p = NULL, *p1 = NULL, *k = NULL;
        int n = Studentmassage::ListCount();
        if (n<2)
            return;
        for (p = Head->Next; p != End; p = p->Next)
            for (k = p->Next; k != End; k = k->Next)
            {
                if (p->PoliticScore>k->PoliticScore)
                {
                    Studentmassage::Swap(p, k);
                }
            }
        cout << "排序完成!" << endl;
        _getch();
        return;
    }
    
    int Studentmassage::ListCount()
    {
        if (!Head)
            return 0;
        int n = 0;
        for (Student * p = Head->Next; p != End; p = p->Next)
        {
            n++;
        }
        return n;
    }

    mian.cpp

    #include"Student.h"
    #include"Studentmassage.h"
    
    int main()
    {
        int x,y,z,s,t,w,i = 0;
        bool quit = false;
        cout << "欢迎进入学生成绩管理系统" << endl;
        Studentmassage Grade;
        //Grade.read();
        cout << "按任意键开始……";
        _getch();
        while (!quit)
        {
            system("cls");
            Grade.Main_Menu();
            cin >> x;
            switch (x)
            {
            case 1:
                system("cls");
                Grade.Stu_Info_Menu();
                cin >> y;
                switch (y)
                {
                case 1:
                    Grade.Display();
                    break;
                case 2:
                    Grade.AddItem();
                    Grade.Save();
                    break;
                case 3:
                    Grade.Find();
                    break;
                case 4:
                    Grade.ModifyItem();
                    break;
                case 5:
                    Grade.RemoveItem();
                    break;
                }
                break;
            case 2:
                system("cls");
                Grade.Search_Menu();
                cin >> z;
                switch (z)
                {
                case 1:
                    Grade.Find();
                    break;
                case 2:
                    Grade.Grade_Menu();
                    cin >> s;
                    switch (s)
                    {
                    case 1:
                        Grade.Display_Math();
                        break;
                    case 2:
                        Grade.Display_Eng();
                        break;
                    case 3:
                        Grade.Display_Com();
                        break;
                    case 4:
                        Grade.Display_PE();
                        break;
                    case 5:
                        Grade.Display_Pol();
                        break;
                    }
                    break;
                }
            case 3:
                system("cls");
                Grade.Sort_Menu();
                cin >> t;
                switch (t)
                {
                case 1:
                    Grade.Find_fail();
                    break;
                case 2:
                    system("cls");
                    Grade.SortbyGrade();
                    cin >> w;
                    switch (w)
                    {
                    case 1:
                        Grade.Sort_Math();
                        Grade.Display();
                        break;
                    case 2:
                        Grade.Sort_Eng();
                        Grade.Display();
                        break;
                    case 3:
                        Grade.Sort_Com();
                        Grade.Display();
                        break;
                    case 4:
                        Grade.Sort_PE();
                        Grade.Display();
                        break;
                    case 5:
                        Grade.Sort_Pol();
                        Grade.Display();
                        break;
                    }
                    break;
                case 3:
                    Grade.Sort();
                    break;
                }
                break;
            case 4:
                quit = true; break;
            }
        }
        return 0;
    }

    运行如图,具体功能大家可以运行下哦~
    运行如图,具体功能大家可以运行下哦~

    展开全文
  • 学校课程设计作业,完成一个简单的学生信息管理系统,考虑到系统实用性,把它做成了一个简单的能够使用的学生成绩管理系统...软件名称:学生成绩管理系统(SSMS) 使用对象:小学、初中、高中 二、 需求分析 1. 系...

    学校课程设计作业,完成一个简单的学生信息管理系统,考虑到系统实用性,把它做成了一个简单的能够使用的学生成绩管理系统,包含了学生信息管理,就当做练手吧。

    发一个博客,做展示用!!

    第一次做的一个比较完整的系统,难免会有一些bug(^_^)

    下载链接:学生成绩管理系统

     

    一、  开发背景

    软件名称:学生成绩管理系统(SSMS)

    使用对象:小学、初中、高中

    二、  需求分析

    1. 系统分析

    该学生信息管理系统涉及到学生、教师、系统管理员、班级、学生成绩、课程。设置一个系统管理员对系统进行管理。所有用户需输入账号、密码登录进入系统;管理员进入系统后可对学生、老师、班级、课程进行增删改查操作;学生进入系统,查看成绩、查看和修改自己的信息;老师进入系统后,对自己这门课程的学生设置课程成绩、查看和修改自己的信息,查看学生的信息和成绩、以及统计分析学生的成绩;

    管理员为班级设置年级,为年级设置课程,为班级的每门课程设置老师,为学生设置班级。一个年级有多门课程(语文、数学、外语等等),班级的每门课程只能有一名老师,一个老师可以有多门课程;老师选择自己这门课程为该课程的学生登记成绩。老师可以查看其他老师的信息(可以当成是老师的通讯录),查看本课程学生的信息和成绩;学生可以查看班级其他同学的信息(可以看成是班级的同学录)。

    考试分为两种,一种是年级统考,一种是平时考试。年级统考需要管理员事先添加一次年级统考,考试成绩出来后,老师进入系统选择该次考试为学生登记成绩。平时考试则是班级平时的考试,老师添加考试信息,登记成绩。成绩统计分析则是针对年级统考进行分析,主要涉及各学科分数名次,总分名次。

    三、开发环境

    系统环境:Windows

    开发工具:Eclipse

    Java版本:JDK 1.7

    服务器:tomcat 7.0

    数据库:MySQL 5.1

    系统采用技术:Servlet+Jsp+Jdbc+H-ui+EasyUI+jQuery+Ajax+面向接口编程

    、其它的看截图

    登录界面:

     

    管理员界面:

     

    考试列表:

     

    成绩统计:

     

    教师列表:

     

    学生列表:

     

    系统设置:

     

    教师界面:

     

    成绩登记:

     

    教师通讯录:

     

    个人信息:

     

    学生界面:

     

    学生成绩查询:

     

    工程目录结构:

     

    BaseDao接口:

     

    最终项目包含文件:

     

    转载于:https://www.cnblogs.com/chiangchou/p/project-ssms.html

    展开全文
  • 学生成绩管理系统需求分析说明书

    热门讨论 2009-05-16 16:51:24
    明确用户对学生成绩管理系统的功能需求和性能需求,并将这些需求用规范化的语言和规范化的结构完整、准确地表达清楚,以此统一软件开发者和用户对学生成绩管理信息系统软件的理解和认识。这是开发学生成绩管理信息...
  • Java大作业 学生成绩管理系统

    热门讨论 2008-12-30 10:44:21
    学生成绩管理系统:用于记录学生的各科成绩,以及实现常用的统计功能。在其中还实现图形方式显示数据,采用直方图显示数据。 【功能】 (1) 记录学生的基本信息,如姓名、学号、专业、班级等; (2) 记录各科成绩:网络...
  • C语言实战之学生成绩管理系统

    万人学习 2016-04-18 17:35:23
    通过C语言开发一个简单的项目:学生成绩管理系统 1.C语言知识点的综合运用,加深对C语言的理解,学会结构化编程的思想 2.熟悉企业软件开发的基本流程,树立软件工程的思维和概念 3.具备独立开发一个小型甚至中型软件...
  • C语言详细学生成绩管理系统

    千次阅读 多人点赞 2019-03-28 16:15:13
    C语言 学生成绩管理系统 简述:该学生管理系统数据结构采用结构体 1、系统需求分析 1.1系统介绍 本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和...

    欢迎查看我的博客:https://Mr00wang.github.io/

    C语言 学生成绩管理系统

    简述:该学生管理系统数据结构采用结构体

    1、系统需求分析

    1.1系统介绍

    本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和信息导入等基本功能,以及对学生成绩排序和分段的扩展功能,有利于对学生成绩管理。

    1.2功能性需求

    (1) 成绩录入

    (2) 成绩输出、成绩排序(按平均成绩)

    (3) 成绩查找

    (4) 成绩修改

    (5) 删除成绩

    (6) 文件存储、文件导入

    1.3非功能性需求

    (1) 友好的交互页面

    (2) 登陆密码设置

    (3) 数据的保护

    2、程序结构设计

    该该系统总体的流程图框架如下

    学生成绩管理系统
    登 陆 界 面
    菜 单 界 面
    录入成绩
    输出成绩
    成绩排序
    成绩查找
    按学号查找
    按姓名查找
    成绩修改
    成绩删除
    按学号删除
    按姓名删除
    文件管理
    文件导入
    文件保存

    3、用户界面设计

    登陆界面

    登陆界面根据自己的需要进行设计,尽量设计的和谐美观。
    如我的登陆界面额外添加了获取时间和登陆密码功能!
    以下展示主要代码和效果展示。

    获取时间代码

        time_t timep;    //系统时间 
    	struct tm *p_1;
    	time (&timep);
    	p_1=gmtime(&timep);
    	printf("\t\t\t\t\t\t  当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t   %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
    
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
        printf("\t★\t\t\t\t\t有朋自远方来,不亦乐乎! \t\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t\t\t 学 生 管 理 系 统\t\t\t\t\t\t★\n\n");
        printf("\t★\t\t\t  制作者:Mr.Wang 专业:软件工程1801 学号:************\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t  欢迎使用软件工程18-01的学生管理系统,祝您使用愉快! \t\t\t\t★\n\n");
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"); 
    

    如图:登陆界面

    菜单界面

    进入页面后设计一个菜单界面,也就是功能界面,在该界面上进行操作

    
    	 printf("\t\t★————————————————————————————————————————★\n\n");
         printf("\t\t\t   | 1. 成绩录入\t\t2. 成绩显示\t\t3. 各科均分  |\n\n");
         printf("\t\t\t   | 4. 成绩排序\t\t5. 成绩查找\t\t6. 信息修改  |\n\n");
         printf("\t\t\t   | 7. 删除成绩\t\t8. 成绩分段\t\t0. 退出系统  |\n\n");
         printf("\t\t★————————————————————————————————————————★\n");
    
    

    展示如下:

    登陆界面

    4、功能设计

    在该模块中,将会介绍程序的主要功能实现的设计思想和代码

    4.1成绩录入

    设计思想

    成绩录入是对结构体中班级、姓名、学号和五门成绩的录入,同时加上对五门成绩平均成绩的计算。按照基本的录入,只需用scanf函数对数据输入,用printf函数进行汉字的打印即可。然后进行文件保存该组数据,最后判断是否继续录入。

    流程图如下

    input

    代码

    //*************************************
    //*************************************
    //学生成绩录入
    void input(struct Student stu[])
    {
        void save(struct Student stu[]);//声明保存文件函数
        int choose;
        int i;
        char tempcla[10]={"-1"};  //定义临时姓名字符串,用于按(-1)返回菜单 
        a:
        system("cls");    //清屏
        fflush(stdin);    //清空缓存区 
        printf("成  绩  录  入\n");
        printf("************************************************************************************************************\n");
        printf("请依次输入\t\t班级、姓名、  学号、     五门课成绩(高数 英语 C语言 计算机基础 软件工程导论)\n");
        printf("班级(按-1返回菜单):");  //输入班级
        while(scanf("%s",stu[count].cla)==0)   //判断返回值,除去类型错误bug 
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        if(strcmp(stu[count].cla,tempcla)==0)  //按-1返回菜单
        {
            printf("\n按任意键返回菜单!\n\n");
            system("pause");
            return;
        }
        while(strlen(stu[count].cla)>10)  //判断字符长度
        {
            fflush(stdin);
            printf("班级输入不合理,请重新录入:");
            scanf("%s",stu[count].cla);
        }
        printf("\n姓名:");  //输入姓名
        fflush(stdin);
        while(scanf("%s",stu[count].name)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(strlen(stu[count].name)>7)
        {
            fflush(stdin);
            printf("姓名不合理,请重新录入:");
            scanf("%s",stu[count].name);
        }
        printf("\n学号:");    //输入姓名
        w:
        fflush(stdin);
        while(scanf("%lld",&stu[count].num)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        for(i=0;i<count;i++)     //判断重复学号
        {
            if(stu[count].num==stu[i].num)
            {
                printf("已有该学号,请重新输入:\n");
                goto w;
            }
        }
        printf("\n高数(0~100):");  //输入高数
        fflush(stdin);
        while(scanf("%f",&stu[count].score[0])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[0]<0||stu[count].score[0]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[0]);
        }
        printf("\n英语(0~100):");   //输入英语
        fflush(stdin);
        while(scanf("%f",&stu[count].score[1])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[1]<0||stu[count].score[1]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[1]);
        }
        printf("\nC语言(0~100):");  //输入C语言
        fflush(stdin);
        while(scanf("%f",&stu[count].score[2])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[2]<0||stu[count].score[2]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[2]);
        }
        printf("\n计算机基础(0~100):");  //输入计算机基础
        fflush(stdin);
        while(scanf("%f",&stu[count].score[3])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[3]<0||stu[count].score[3]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[3]);
        }
        printf("\n软件工程导论(0~100):"); //输入软件工程导论
        fflush(stdin);
        while(scanf("%f",&stu[count].score[4])==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        while(stu[count].score[4]<0||stu[count].score[4]>100)
        {
            fflush(stdin);
            printf("数据超出,请重新输入:");
            scanf("%f",&stu[count].score[4]);
        }
        stu[count].aver=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2]+stu[count].score[3]+stu[count].score[4])/5.0;//计算平均成绩 
        count++;   //结构体数据数+1
        save(p);   //保存文件
        fflush(stdin);
        printf("是否继续录入:\n\n");
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("\n请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
       switch(choose)
        {
            case 1:goto a;break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
    }
    

    部分代码说明

     while(scanf("%s",stu[count].cla)==0)   //判断返回值,除去类型错误bug 
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        
      //在输入成绩时通常直接使用scanf,但当我们做项目时,为了具有一定的容错性,需要判断输入数据的类型和
      //判断scanf的返回值,如果直接使用scanf,输入其它类型的数据,程序将会炸掉,因此我们需要用这种形式
      //保证系统正常运行
    

    scanf的返回值具体解释见他人解释,地址如下:
    (https://blog.csdn.net/zhl254467014/article/details/44183567)

    为了方便其它功能的实现,在这里需要判断学号是否重复,保证学号的唯一性

     w:
        fflush(stdin);
        while(scanf("%lld",&stu[count].num)==0)
        {
            fflush(stdin);
            printf("格式有误,请重新输入:");
        }
        for(i=0;i<count;i++)     //判断重复学号
        {
            if(stu[count].num==stu[i].num)
            {
                printf("已有该学号,请重新输入:\n");
                goto w;
            }
        }
    

    4.2成绩显示

    由于我想按照平均成绩排序的方式输出,因此直接调用该函数

    //*************************************
    //*************************************
    //学生成绩显示
    void print(struct Student stu[])
    {
        void sort(struct Student stu[]);//声明平均成绩排序函数
        system("cls");//清屏函数
        if(count==0) printf("\n您尚未录入学生信息,请返回菜单进行录入!\n");
        sort(p);    //排序函数
        return;
    }
    

    4.3成绩排序

    排序思想:
    成绩排序是将结构体中的数据按平均成绩进行排序,在本系统中,我将成绩排序非为按五门成绩排序和平均成绩排序,排序的思想是运用冒泡排序。在此功能中需注意的是排序时要将整组数据随着平均成绩一起改变,最后不能出现平均成绩与信息对应不上。其次在进行字符串互换的时候不能直接赋值号进行互换,要用strcpy函数进行复制,在这里只展示按平均成绩排序的代码,其它成绩排序与之相似

    //*************************************
    //*************************************
    //平均成绩排序
    void sort(struct Student stu[])
    {
        void save(struct Student stu[]);
        system("cls");
        fflush(stdin);
        char tempname[20];  //临时变量
        char tempcla[20];
        int i,j;
        long long int t1;
        float t;
        if(count==0) printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
        else
        {
            printf("\n成绩显示(按平均成绩排序)\n");   //冒泡排序
                for(i=0;i<count-1;i++)
                {
                    for(j=0;j<count-i-1;j++)
                    {
                        if(stu[j].aver<stu[j+1].aver)  //注意字符串的复制 
                        {
                            strcpy(tempcla,stu[j].cla);strcpy(stu[j].cla,stu[j+1].cla);strcpy(stu[j+1].cla,tempcla);
                            strcpy(tempname,stu[j].name);strcpy(stu[j].name,stu[j+1].name);strcpy(stu[j+1].name,tempname);
                            t1=stu[j].num;stu[j].num=stu[j+1].num;stu[j+1].num=t1;
                            t=stu[j].score[0];stu[j].score[0]=stu[j+1].score[0];stu[j+1].score[0]=t;
                            t=stu[j].score[1];stu[j].score[1]=stu[j+1].score[1];stu[j+1].score[1]=t;
                            t=stu[j].score[2];stu[j].score[2]=stu[j+1].score[2];stu[j+1].score[2]=t;
                            t=stu[j].score[3];stu[j].score[3]=stu[j+1].score[3];stu[j+1].score[3]=t;
                            t=stu[j].score[4];stu[j].score[4]=stu[j+1].score[4];stu[j+1].score[4]=t;
                            t=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=t;
    
                        }
                    }
    
                }
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                for(i=0;i<count;i++)
                    printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        save(p);   //保存文件
        }
        system("pause");
        return;
    }
    

    4.4成绩查找

    设计思想:
    成绩查找需要实现的是按学号和姓名查找到学生的所有信息,然后打印出来。该功能的思想是输入学号或姓名,然后在循环体中对结构体进行遍历,找到所查到的结构体的下标值,然后将该下标值对应学生的信息打印出来。按照姓名查询时,判断字符串是否相等需要用strcmp函数。在循环体中对结构体进行遍历的时候,找到的时候,可以用break跳出循环,提高效率。

    流程图如下:

    search

    代码展示

    //*************************************
    //*************************************
    //按学号查询
    void findnum(struct Student stu[])
    {
        int i;
        int searchindex=-1;  //定义下表值 
        long long int searchnum;
        fflush(stdin);
        printf("\n请输入查询成绩的学生学号:");
        scanf("%lld",&searchnum);
        for(i=0;i<count;i++)
        {
            if(searchnum==stu[i].num)
            {
                system("cls");
                searchindex=i;
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                break;  //找到后跳出 
            }
        }
        if(searchindex==-1)
            printf("\n很抱歉,没有找到该学生的学号!\n\n");
        printf("\n按任意键返回成绩查询\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //按姓名查询
    void findname(struct Student stu[])
    {
        int i;
        char searchname[20];
        int searchindex=-1;
        fflush(stdin);
        printf("\n请输入查询成绩学生的姓名:\n");
        scanf("%s",searchname);
        for(i=0;i<count;i++)  //循环寻找姓名
        {
            if(strcmp(searchname,stu[i].name)==0)
            {
                system("cls");
                searchindex=i;
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                break;//找到跳出
            }
        }
        if(searchindex==-1)
            printf("\n很抱歉,没有找到该学生的姓名!\n\n");
        printf("\n按任意键返回成绩查询\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //成绩查询
    void find(struct Student stu[])
    {
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        int choose;
        system("cls");
        fflush(stdin);
        choose:   //成绩查询页面菜单
        printf("\n\t\t\t\t\t\t  成绩查询\n\n");
        printf("\t\t\t\t\t*****************************\n\n");
        printf("\t\t\t\t\t |1.按学号查找 2.按姓名查找|\n\n");
        printf("\t\t\t\t\t |3.全部显示   4.返回菜单  |\n\n");
        printf("\t\t\t\t\t*****************************\n");
        printf("\t\t\t\t\t\n请输入查询方式:");
        a:
        while(scanf("%d",&choose)==0)
        {
            printf("输入格式有误,请您重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
    	    case 1:
    	        findnum(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 2:
    	        findname(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 3:
    	        print(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 4:
    	        printf("\n按任意键返回菜单!\n\n");
    	        system("pause");
    	        return;
    	    default:
    	        printf("没有该序号,请您重新输入:");goto a;
        }
    }
    

    4.5成绩修改

    该功能与录入成绩功能相似,成绩修改是对结构体中的信息进行修改,首先找到需要修改同学结构体的下标值,然后对该下标值对应的信息进行覆盖修改,该信息修改的录入与成绩录入功能的录入相同,同样需要注意与成绩录入时的漏洞。过多的不说了,直接上代码,依据我的需求,代码较多,仅供参考

    ******************************
    //修改成绩
    void change(struct Student stu[])
    {
        void save(struct Student stu[]);
        int i,j;
        int choose;
        long long int searchnum,tempnum;
        int searchindex=-1;
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        a:
        system("cls");
        printf("\n修改成绩!\n\n");
        fflush(stdin);
        printf("************************************************\n");
        printf("\n请输入修改学生的学号:(按-1返回菜单)");
        scanf("%lld",&searchnum);
        fflush(stdin);
        if(searchnum==-1)
        {
            printf("\n按任意键返回菜单!\n\n");
            system("pause");
            return;
        }
        system("cls");
        for(i=0;i<count;i++)
        {
            if(searchnum==stu[i].num)
            {
                searchindex=i;
                printf("\n该学生信息:\n");  //修改成绩页面菜单
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
                printf("************************************************\n");
                printf("|1.修改班级\t       2. 修改姓名            |\n");
                printf("|3.修改学号\t       4. 修改高数            |\n");
                printf("|5.修改英语\t       6. 修改C语言           |\n");
                printf("|7.修改计算机基础      8. 修改软件工程导论    |\n");
                printf("|9.返回菜单\t                              |\n");
                printf("************************************************\n");
                printf("请选择修改的信息:");
                choose:
                while(scanf("%d",&choose)==0)
                {
                    printf("输入格式有误,请您重新输入:");
                    fflush(stdin);
                }
                switch(choose)
                {
    	            case 1:
    	                fflush(stdin);
    	                printf("请修改班级:");
    	                while(scanf("%s",stu[i].cla)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(strlen(stu[count].cla)>10)  //判断字符长度
    	                {
    	                    printf("班级输入不合理,请重新录入:");
    	                    fflush(stdin);
    	                    scanf("%s",stu[count].cla);
    	                }
    	                break;
    	            case 2:
    	                fflush(stdin);
    	                printf("请修改姓名:");
    	                while(scanf("%s",stu[i].name)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(strlen(stu[count].name)>10)  //判断字符长度
    	                {
    	                    printf("班级输入不合理,请重新录入:");
    	                    fflush(stdin);
    	                    scanf("%s",stu[count].name);
    	                }
    	                break;
    	            case 3:
    	                fflush(stdin);
    	                printf("请修改学号:");
    	                w:
    	                while(scanf("%lld",&stu[i].num)==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                tempnum=stu[i].num;
    	                stu[i].num=0;
    	                for(j=0;j<count;j++)
    	                {
    	                    if(tempnum==stu[j].num)
    	                    {
    	                        printf("已有该学号,请重新输入:\n");
    	                        goto w;
    	                    }
    	                }
    	                stu[i].num=tempnum;
    	                break;
    	            case 4:
    	                fflush(stdin);
    	                printf("请修改高数:");
    	                while(scanf("%f",&stu[i].score[0])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[0]<0||stu[i].score[0]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[0]);
    	                }
    	                break;
    	            case 5:
    	                fflush(stdin);
    	                printf("请修改英语:");
    	                while(scanf("%f",&stu[i].score[1])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[1]<0||stu[i].score[1]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[1]);
    	                }
    	                break;
    	            case 6:
    	                fflush(stdin);
    	                printf("请修改C语言:");
    	                while(scanf("%f",&stu[i].score[2])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[2]<0||stu[i].score[2]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[2]);
    	                }
    	                break;
    	            case 7:
    	                fflush(stdin);
    	                printf("请修改计算机基础:");
    	                while(scanf("%f",&stu[i].score[3])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[3]<0||stu[i].score[3]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[3]);
    	                }
    	                break;
    	            case 8:
    	                fflush(stdin);
    	                printf("请修改软件工程导论:");
    	                while(scanf("%f",&stu[i].score[4])==0)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                }
    	                while(stu[i].score[4]<0||stu[i].score[4]>100)
    	                {
    	                    printf("格式有误,请重新输入:");
    	                    fflush(stdin);
    	                    scanf("%f",&stu[i].score[4]);
    	                }
    	                break;
    	            case 9:
    	                printf("\n按任意键返回菜单!\n\n");
    	                save(p);
    	                return;
    	            default:
    	                printf("没有该序号,请您重新输入:");
    	                goto choose;
                }//switch结尾处 
                stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4])/5.0;
                printf("\n修改成功:\n");
                printf("************************************************************************************************************\n");
                printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
                printf("************************************************************************************************************\n");
                printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
            }//if结束处
        }//for结束处
        if(searchindex==-1)
        {
            printf("\n很抱歉,未能找到该学生,请重新输入学号!\n\n");
            system("pause");
            goto a;
        }
        save(p);
        system("pause");
        return;
    }
    

    4.6成绩删除

    设计思想:
    删除成绩是对结构体中的信息进行删除,其实对于C语言无法进行删除本身的意义,只是做出了一些假像,其实删除成绩就是覆盖成绩。删除成绩分为按学号删除和按姓名删除。删除成绩的思想为覆盖,首先通过结构体的遍历找到所删学生信息的下标值,然
    后从该下标值开始,后面一个学生信息覆盖前面一个学生的信息,最后最关键的一点是将全局变量count即结构体组数-1

    流程图如下:

    delete

    代码如下:

    //*************************************
    //*************************************
    //删除成绩
    void del(struct Student stu[])
    {
        void delnum(struct Student stu[]);
        void delname(struct Student stu[]);
        void save(struct Student stu[]);
        int choose;
        if(count==0)
        {
            printf("\n\n您尚未录入学生信息,请返回菜单进行录入!\n\n");
            system("pause");
            return;
        }
        choose:
        fflush(stdin);   //删除成绩页面菜单
        printf("\n\t\t\t\t\t     删除成绩\n\n");
        printf("\t\t\t\t********************************\n\n");
        printf(" \t\t\t\t\t   1.按学号删除\n\n\t\t\t\t\t   2.按姓名删除\n\n\t\t\t\t\t   3.返回菜单\n\n");
        printf("\t\t\t\t********************************\n\n");
        printf("请输入删除方式:");
        a:
        while(scanf("%d",&choose)==0)
        {
            printf("输入格式有误,请您重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
    	    case 1:
    	        delnum(p);
    	        save(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 2:
    	        delname(p);
    	        save(p);
    	        system("cls");
    	        goto choose;
    	        break;
    	    case 3:
    	        printf("\n按任意键返回菜单!\n\n");
    	        system("pause");
    	        return;
    	    default:
    	        printf("没有该序号,请您重新输入:");goto a;
        }
    
    }
    //*************************************
    //*************************************
    //按学号删除成绩
    void delnum(struct Student stu[])
    {
        void print(struct Student stu[]);
        int i,choose;
        int searchindex=-1;
        long long int deletenum;
        fflush(stdin);
        printf("请输入要删除学生的学号(按-1返回):");
        scanf("%lld",&deletenum);
        printf("是否确定删除:\n");
        fflush(stdin);
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
        switch(choose)
        {
            case 1:break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
        if(deletenum==-1)
        {
            printf("\n按任意键返回删除成绩!\n\n");
            system("pause");
            return;
        }
        for(i=0;i<count;i++)
        {
            if(deletenum==stu[i].num)
            {
                searchindex=i;
                break;
            }
        }
        if(searchindex==-1)
        {
            printf("\n很遗憾,未能找到所要删除学生的学号!\n");
            printf("\n按任意键返回菜单\n\n");
            system("pause");
            return;
        }
        else  //查找信息后,每组数据往前进行覆盖
        {
            for(i=searchindex;i<count-1;i++)
            {
                strcpy(stu[i].cla,stu[i+1].cla);
                stu[i].num=stu[i+1].num;
                strcpy(stu[i].name,stu[i+1].name);
                stu[i].score[0]=stu[i+1].score[0];
                stu[i].score[1]=stu[i+1].score[1];
                stu[i].score[2]=stu[i+1].score[2];
                stu[i].score[3]=stu[i+1].score[3];
                stu[i].score[4]=stu[i+1].score[4];
                stu[i].aver=stu[i+1].aver;
            }
            count--;  //总数据组-1
        }
        if(count==0)
        {
            printf("\n目前没有学生信息,请返回菜单录入!\n\n");
            system("pause");
            return;
        }
        system("cls");  //删除后进行打印
        printf("\n删除成功!\n\n");
        printf("************************************************************************************************************\n");
        printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
        printf("************************************************************************************************************\n");
        for(i=0;i<count;i++)
             printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    //*************************************
    //*************************************
    //按姓名删除成绩
    void delname(struct Student stu[])
    {
        void print(struct Student stu[]);
        int i,choose;
        char tempname[10]={"-1"};
        int searchindex=-1;
        char deletename[20];
        fflush(stdin);
        printf("请输入要删除学生的姓名(按-1返回):");
        scanf("%s",deletename);
        printf("是否确定删除:\n");
        fflush(stdin);
        printf("1.是 2.否\n");
        fflush(stdin);
        printf("请选择:");
        b:
        while(scanf("%d",&choose)==0)
        {
        	printf("您输入的格式错误,请重新输入:\n");
        	fflush(stdin);
        	goto b;
    	}
    	switch(choose)
        {
            case 1:;break;
            case 2:return;break;
            default:printf("没有该序号,请重新输入:");goto b;
        }
        if(strcmp(deletename,tempname)==0)
        {
            printf("\n按任意键返回删除成绩!\n\n");
            system("pause");
            return;
        }
        for(i=0;i<count;i++)
        {
            if(strcmp(deletename,stu[i].name)==0)
            {
                searchindex=i;
                break;
            }
        }
        if(searchindex==-1)
        {
            printf("\n很遗憾,未能找到所要删除学生的姓名!\n");
            printf("\n按任意键返回菜单\n\n");
            system("pause");
            return;
        }
        else
        {
            for(i=searchindex;i<count-1;i++)
            {
                strcpy(stu[i].cla,stu[i+1].cla);
                stu[i].num=stu[i+1].num;
                strcpy(stu[i].name,stu[i+1].name);
                stu[i].score[0]=stu[i+1].score[0];
                stu[i].score[1]=stu[i+1].score[1];
                stu[i].score[2]=stu[i+1].score[2];
                stu[i].score[3]=stu[i+1].score[3];
                stu[i].score[4]=stu[i+1].score[4];
                stu[i].aver=stu[i+1].aver;
            }
            count--;
        }
        printf("\n");
        printf("\n删除成功!\n\n");
        if(count==0)
        {
            printf("\n目前没有学生信息,请返回菜单录入!\n\n");
            system("pause");
            return;
        }
        system("cls");
        printf("\n删除成功!\n\n");
        printf("************************************************************************************************************\n");
        printf("\t班级\t姓名\t学号\t\t高数\t英语\tC语言\t计算机基础\t软件工程导论\t平均成绩\t\n");
        printf("************************************************************************************************************\n");
        for(i=0;i<count;i++)
            printf("\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,
                       stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    

    核心代码如下,请好好理解

    for(i=0;i<count;i++){
        if(deletenum==stu[i].num)
         {
              searchindex=i;
              break;
          }
     }
      //查找信息后,每组数据往前进行覆盖
     for(i=searchindex;i<count-1;i++)
      {
             strcpy(stu[i].cla,stu[i+1].cla);
             stu[i].num=stu[i+1].num;
             strcpy(stu[i].name,stu[i+1].name);
             stu[i].score[0]=stu[i+1].score[0];
             stu[i].score[1]=stu[i+1].score[1];
             stu[i].score[2]=stu[i+1].score[2];
             stu[i].score[3]=stu[i+1].score[3];
             stu[i].score[4]=stu[i+1].score[4];
             stu[i].aver=stu[i+1].aver;
        }
        count--;  //总数据组数-1
    
    

    4.7文件保存

    文件存储简要介绍:

    文件存储是将程序中的数据存储如磁盘中,生成文件。在我们没有进行保存之前,我们每次进入系统都要进行录入,如果数据很多,那么操作十分复杂。所有我们需要对数据进行存储。然后进入系统时进行导入,文件的存储分为两种方法,一种是十进制进行存储,另一种是二进制进行存储。这两种方式都可以对数据进行存储,但每种方式都有其的优点和缺点,对于第一种十进制存储,用fprintf函数对磁盘写入,它的优点是格式化输出,在磁盘中可查看数据,也可进行修改使用方便,容易理解,缺点是由于在输入时要将文件中的ASCII码转换为二进制形式在保存在内存变量中,在输出时又要将内存的二进制形式转换成字符,要花费较多时间。并且数据可被其他人查看和修改,在保存数据时需要进行进制转换,可能会造成数据错误。对于二进制存储,用fwrite函数对磁盘文件进行写,优点是fwrite函数可向文件写一个数据块,在读写时以二进制形式进行的。在向磁盘写数据时,直接将内存中一组数据原封不动、不加转换地复制到磁盘文件上,不需要进制转换,运行速度高。其缺点是生成二进制文件,信息是一堆乱码,但是该文件安全系数高,他人无法查看文件内容,对文件数据进行保护。

    我的文件是使用二进制存储
    具体代码如下:

    void save(struct Student stu[])
    {
        int i;
        FILE*fp;
        fp=fopen("student.bat","wb");
        for(i = 0; i < count; i++)
        {
            if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
                printf("file write error\n");
        }
        fclose(fp);
        printf("\n已保存至文件中\n\n");
    }
    

    鉴于有些人使用十进制文件,我这里也写了,代码如下:

    FILE *fp;
    int i;
    if((fp=fopen("student.txt","w"))==NULL)
    {
    	 printf("error");
    	exit(0);
    }
    for(i = 0; i < count; i++)
    fprintf(fp,"\t%-8s%-8s%-16lld%-8.2lf%-8.2lf%-8.2lf%-16.2lf%-16.2lf%-12.2lf\n",stu[i].cla,stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
    printf("save success!\n");
    fclose(fp);
    

    4.7文件保存

    简要概述
    文件导入是对磁盘中的数据导入进学生管理系统的结构体中,对数据进行使用。文件导入是与文件存储相对应,十进制导入对应十进制存储,二进制导入对应二进制存储。因此文件导入也分为两种,十进制导入用fscanf,二进制文件导入用fread

    这里同样展示两种方式
    首先是二进制

    //文件导入
    void read(struct Student stu[])
    {
        int i;
        FILE*fp;
        if((fp=fopen("student.bat","rb"))==NULL)
            return;
        for(i=0;i<1000;i++)
        {
            if(fread(&stu[i],sizeof(struct Student),1,fp)!=1)
            {
                if(feof(fp))
                {
                    fclose(fp);
                    goto a;
                }
                printf("file read error\n");
            }
            count++;  //存入一个,数据组数+1
        }
        fclose(fp);
        a:
        printf("\n导入文件已成功,祝您使用愉快!\n\n");
        printf("请按任意键进入页面菜单!\n\n");
        system("pause");
        return;
    }
    

    二进制形式

    while(num!=EOF){
    		   num=fscanf(fp,"%s %s %lld %f %f %f %f %f %f\n",stu[i].cla,stu[i].name,stu[i].num,
                     stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver);
    		    count++;  //存入一个,数据组数+1
    }
    	count--;
    

    4.8主函数代码

    主函数代码展示

    //*************************************
    //*************************************
    //主函数
    int main()
    {
        system("color 9E"); //设置背景颜色
        int i=4;
        char code[20]={'1','2','3','4','5','6'},password[20];
    	int x;
    	char c;
        //初始页面
        time_t timep;    //系统时间 
    	struct tm *p_1;
    	time (&timep);
    	p_1=gmtime(&timep);
    	printf("\t\t\t\t\t\t  当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t   %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
        printf("\t★\t\t\t\t\t有朋自远方来,不亦乐乎! \t\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t\t\t 学 生 管 理 系 统\t\t\t\t\t\t★\n\n");
        printf("\t★\t\t\t  制作者:Mr.Wang 专业:软件工程1801 学号:************\t\t\t\t★\n\n");
        printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
        printf("\t★\t\t\t  欢迎使用软件工程18-01的学生管理系统,祝您使用愉快! \t\t\t\t★\n\n");
        printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"); 
    	printf("请输入六位登陆密码!\n");
    	q:
    	x=0;
    	while(x<6 && c!=13)
    	{
    		c=getch();
    		if(c!=13)
    		putchar('*');
    		password[x++]=c;
    	}
    	password[x]='\0';
        if(strcmp(password,code)!=0)
        {
        	fflush(stdin);
            printf("\n输入密码有误,您还有%d次机会,请重新输入:",i--);
            if(i==-1)
            {
                exit(0);
            }
            goto q;
        }
        read(p); //导入文件
        system("cls");    //清屏
        //页面菜单
        menu:
        system("cls");
        time (&timep);
    	p_1=gmtime(&timep);
        printf("\t\t\t\t\t\t   当前时间%02d时%02d分%\n",8+p_1->tm_hour,p_1->tm_min); 
    	printf("\t\t\t\t\t\t    %d年%02d月%02d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
        printf("\n");
        printf("\t\t\t\t\t\t    页  面  菜  单\n");
        printf("\n");
        printf("\t\t★————————————————————————————————————————★\n\n");
        printf("\t\t\t   | 1. 成绩录入\t\t2. 成绩显示\t\t3. 各科均分  |\n\n");
        printf("\t\t\t   | 4. 成绩排序\t\t5. 成绩查找\t\t6. 信息修改  |\n\n");
        printf("\t\t\t   | 7. 删除成绩\t\t8. 成绩分段\t\t0. 退出系统  |\n\n");
        printf("\t\t★————————————————————————————————————————★\n");
        printf("\t\t\t\t\t\t          * \n");
        printf("\t\t\t\t\t\t         *** \n");
        printf("\t\t\t\t\t\t        ***** \n");
        printf("\t\t\t\t\t\t       *******\n");
        printf("\t\t\t\t\t\t      *********\n");
        printf("\t\t\t\t\t\t     *********** \n");
        printf("\t\t\t\t\t\t ********************\n");
        printf("\t\t\t\t\t\t  ******************\n");
        printf("\t\t\t\t\t\t   ******* ********\n");
        printf("\t\t\t\t\t\t  *******   ********\n");
        printf("\t\t\t\t\t\t ******       *******\n");
        printf("\t\t\t\t\t\t******          ******\n");
        printf("请选择相应序号:");
        int choose;
        int a; 
        w:
        while(scanf("%d",&choose)==0)
        {
            printf("格式错误,请重新输入:");
            fflush(stdin);
        }
        switch(choose)
        {
        	case 1:   //成绩录入
    	        system("cls");
    	        printf("学生成绩录入\n");
    	        input(p);
    	        goto menu;
    	    case 2:  //成绩显示和排序
    	    	system("cls");
    	        printf("学生成绩显示\n");
    	        print(p);
    	        goto menu;
    	    case 3:  //均科成绩 
    	    	system("cls");
    			average(p);
    			goto menu;
    	    case 4:  //成绩排序
    	    	 system("cls");
    	        projectsort(p);
    	        goto menu;
    	    case 5:  //成绩查找
    	        system("cls");
    	        find(p);
    	        goto menu;
    	    case 6:  //成绩修改
    		    system("cls");
    	        change(p);
    	        goto menu;
    	    case 7:  //成绩删除
    		    system("cls");
    	        del(p);
    	        goto menu;
    	    case 8:  //成绩分段
    		    system("cls");
    	        section(p);
    	        goto menu;
    	    case 0: //退出系统
    	        fflush(stdin);
    	        printf("\n是否继续退出:\n");
    	        printf("\n1. 是 2. 否\n\n");
    	        back:
    	        printf("请选择:");
    	        while(scanf("%d",&a)==0)
    	        {
    	        	fflush(stdin);
    	        	printf("您输入格式有误,请重新输入:");
    			}
    	        if(a==1)
    	        {
    	            system("cls");
    	            //心形图案 
    	            float y, x, b;
    	            for (y = 1.5f;y > -1.5f;y -= 0.1f)
    	            {
    	                for (x = -1.5f;x < 1.5f;x += 0.05f)
    	                {
    	                    b = x*x + y*y - 1;
    	                    putchar(b*b*b - x*x*y*y*y <= 0.0f ? '*' : ' ');
    	                }
    	                putchar('\n');
    	            }
    	            Sleep(1000);  //休眠 
    	            printf("欢迎下次继续使用本产品!\n");
    	            printf("正在退出,请稍后.");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            printf(".");
    	            Sleep(500);
    	            exit(0);
    	        }//if(a==1)结束处 
    	        if(a==2)goto menu;
    	        if(a!=1||a!=2)printf("输入有误,重新输入:\n");goto back;
    	    default:
    	    	printf("没有该序号!请重新输入:");
            	goto w;
    	}//switch结束处 
        return 0;
    }
    

    4、效果展示

    login
    inputprintfsortchangeexit

    退出时的效果可以自行添加,这里我在csdn上找的时一个心型图案,该图案设计者链接如下:

    (https://blog.csdn.net/stone15165/article/details/80260580)

    源码在github上:https://github.com/Mr00wang/C-language.git
    以上是该学生管理系统的全部内容,上面没有对各科均分和成绩分段进行展述,如有问题请留言,谢谢!

    展开全文
  • 基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统

    千次阅读 多人点赞 2020-10-19 17:36:24
    你知道的越多,你不知道的...软件名称:基于 Servlet+jsp+mysql 开发 javaWeb 学生成绩管理系统 使用对象:学习或了解过 java 基础课程,开始接触 javaWeb 的学生和软件爱好者 其他相关:基于SSH(Spring+SpringMVC+Hib.
  • Java swing的学生成绩管理系统

    千次阅读 2020-02-14 10:38:52
    一个使用Java swing的学生成绩管理系统软件工程实验周的数据库大作业源码下载地址希望对你有帮助 https://github.com/21503882/studentscore 作业要求如下: 学生成绩管理系统中,系统的用户是学校的学生、教师和...
  • VC版学生成绩管理系统

    千次阅读 2013-12-31 21:06:36
    VC版学生成绩管理系统 一. 功能需求:  1. 能进行对数据库的连接(后台): 这是查询管理信息的基础。 2. 能进行增、删、改、查等基本功能: 这是学生成绩管理系统最基本的功能,可以在这个基础上进行扩展...
  • 总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改 、增加、删除,另外还考虑到用户登录的权限,针对学生信息和权限登录的学生成绩管理系统
  • 使用c++实现学生成绩管理系统

    千次阅读 2021-04-15 14:24:17
    学生成绩管理系统的设计,可以更好地帮助学习c++的初学者掌握基础知识。因此,小编将带领大家一起使用c++实现学生成绩管理系统,本文就介绍了一些相关的代码。 二、系统介绍 学生类CStudent,该类有以下几个私有成员...
  • 学生成绩管理系统UML图

    热门讨论 2009-04-05 18:23:03
    学习软件开发工具时,一般都要用UML的开发工具,有时需要画一些UML图,例如用例图,类图等等。本资料很适合初学UML的人,可以让你进一步了解UML。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,089
精华内容 5,235
关键字:

软件工程学生成绩管理系统