大一下学期写的C语言程序设计实验报告——学生成绩管理系统课程设计与实现
此篇为“设计篇”o~
目录
前言
此篇为大一下学期写的C语言程序设计实验报告——学生成绩管理系统课程设计与实现
这篇为设计篇~ 代码部分可以查看下一篇文章哦>.<
编译工具我用的是codeblocks,其他一般C语言编译器如vc++等也是可以运行的哦
具体内容如下啦
一、设计任务
随着信息时代的到来,办公趋向无纸化、高效化,对于学生成绩的管理更是如此,基于此,我选择了学生成绩管理系统作为我的课题,希望能够模仿教务系统中成绩的录入与查询功能,编写自己的成绩管理系统。从教师与学生两个角度分别实现成绩的录入、删除、修改、排序、浏览与查询功能。
二、程序设计与实现
1.程序设计
本程序面向两类用户即教师与学生,登录需密码,登录成功后有两个入口,分别为教师端和学生端。教师端共有添加、删除、修改、查找、浏览、排序六个功能,学生权限为查看本人详细成绩、查看班级成绩由高到低排序两个功能。学生成绩管理系统功能结构图如图1.所示。
图1 学生成绩管理系统功能结构图
2.数据描述
(1)学生信息存储
代码中定义结构体类型struct student来存储学生的信息。结构体类型定义及结构体成员含义说明如下所示。
struct student { char name[20]; char num[20]; int math; int Cgrade; int English; int total; }; |
(2)全局变量设计
定义全局变量tea[50]记录密码用户数量,用于用户输入。
Struct teacher tea[50];
(3)账号密码设计
代码中定义结构体变量struct teacher来储存账号和密码。
struct teacher
{
char ac[30];//账号
char pw[30];//密码
};
3.功能模块设计
(1)函数名:void Hello()
函数功能:显示登录界面
输入:用户输入选项
输出:各项功能
算法描述:采用switch函数
当 case 1:显示登录功能 login();
case 2:显示注册功能 registeruser();
case 0:退出登录
(2)函数名:void login ()
函数功能:显示登录功能
输 入:账号 密码
输 出:无
算法描述:
(3)函数名:void registeruser()
函数功能:注册账号功能
输 入:用户账号 密码(六位)
输 出:无
算法描述:输入账号:
输入密码:采用for循环,使得输入密码时用*显示。
再次输入密码:(1)若密码正确,则注册成功
(2)若密码错误,则注册失败,重新注册
(4)函数名:void Menu() 和 void Key()
函数功能:系统菜单,选择教师端或学生端
输入:用户输入选项
输出:教师菜单 或 学生菜单
算法描述:采用switch函数
case 1:教师端 菜单及功能 systemMenu(); keyDown();
case 2:学生端 菜单及功能 stuMenu(); stuKeyDown();
case 3:退出登录 回到Hello()函数 : 登录界面
case 0:退出系统。
(5)函数名:void systemMenu() 和 void keyDown()
函数功能:分别为显示教师菜单 和 实现教师功能
输入:用户输入选项
输出:各项功能
算法描述:采用switch函数
当case 1:录入学生信息
插入链表 insertNodeByHead(list,tempData);
保存到文件 saveInfoToFile("student.txt",list);
case 2:浏览学生信息
打印链表 printList(list);
case 3:删除学生信息
删除函数 deleteNodeByAppoinNum(list,tempData.num);
保存到文件saveInfoToFile("student.txt",list);
case 4:修改学生信息
输入新的信息,保存到文件saveInfoToFile("student.txt",list);
case 5:根据学号查找学生信息
searchNodeByAppoinNum(list,tempData.num);
case 6:根据总成绩从高到低排序
排序函数 sortStudentListByTotal(list);
打印 printList(list);
case 7:返回到主菜单 主功能 Menu(); Key();
case 0:退出系统。
(6) 函数名:void stuMenu() 和 void stuKeyDown()
函数功能:分别显示学生菜单 和 学生功能
输 入:用户输入选项
输 出:各项功能
算法描述:采用switch函数
case 1:根据学号查找学生个人信息
searchNodeByAppoinNum(list,tempData.num);
case 2:查找班级总成绩及从高到低的排名
排序函数 sortStudentListByTotal(list);
打印 printList(list);
case 3:返回到主菜单 主功能 Menu(); Key();
case 0:退出系统。
(7)函数名:void deleteNodeByAppoinNum(struct Node* listHeadNode,char* num)
函数功能:通过学号删除学生信息
输入:学生学号
输出:若学号匹配,则删除成功
算法描述:
(8)函数名:struct Node *sortStudentListByTotal(struct Node *listHeadNode)
函数功能:根据总成绩从高到低排序
输入:无
输出:无
算法描述:采用选择排序法
(9)函数名:struct Node* searchNodeByAppoinNum(struct Node* listHeadNode,char* num)
函数功能:根据学号查找学生信息
输入:学生学号
输出:无
算法描述:
三、总结
通过此次实验项目,学到了(1)链表的使用;
(2)以及指针的高级用法 如结构体指针等。
自己在做项目时,存在哪些问题?后续如何改正?
(1)登录注册等出现问题、以及链表运用不熟练,以至于有些程序不能如愿做出;
(2)后续会更加努力学习链表,尽量做到熟练运用,以及对文件的熟练操作等。