在学习C语言的最后老师让我们做的系统,参考了GitHub里的代码,完整代码我已上传到了资源里面,有意自取。
目录
一.需求分析
1.软件开发目的
当代学生群体庞大,每个学生又有许多门不同学科的成绩,传统的手写处理已经无法很好满足管理的要求,因此建立一个清晰准确的学生成绩管理系统是十分必要的。该系统以C语言进行编写,具有成绩查询,信息添加、修改、删除等功能,操作简单易懂。
(1)首先出现一个菜单页面,根据菜单提示选择相应的操作
(2)将教师信息、学生信息、课程信息以及成绩信息存入文件中。
(3)在本系统中进行管理系统包含的基本操作,其中包括:
a) 完成不同用户身份登录时的验证(管理员、教师、学生);
b) 管理员可以实现教师信息的管理、课程信息的管理、学生信息的管理以及所有信息的浏览;
c)教师可以实现教师信息的修改,学生成绩的录入;
dd) 学生只能查看学生的成绩;
2.功能需求
(1)教师、学生基本信息的录入和保存
这部分的功能是把管理员的账号密码保存在idadm.txt中,把教师的账号、密码保存在idtea.txt中,把老师的账号、性别、姓名以及任教科目保存在UserInfo.txt中,把学生的学号(账号)、密码保存在idstu.txt中,把学生的姓名、学号、三门课的单科成绩和总成绩保存在StudentScore.txt中。
(2)教师信息管理
这部分的功能可以由管理员来实现,管理员登陆成功后,可以进行教师信息查询、教师信息修改、教师信息删除、教师信息追加功能。
(3)显示所有学生信息
这部分的功能由管理员或教师来实现,管理员或教师登录后可以直接通过选择显示所有学生信息来查看系统内所有学生的信息
(4)学生信息数据查询
这部分的功能学生、教师和管理员都可以实现,学生、教师、管理员登录成功后都可以运行这项功能。
(5)学生信息数据修改
这部分的功能由管理员或教师实现,教师或管理员登录成功后可以通过搜索学生的学号修改该学生的学号、姓名以及各科成绩
(6)学生信息数据删除
这部分的功能由管理员或教师实现,教师或管理员登录成功后可以通过搜索该学生的学号删除该学生的信息数据
(7)学生信息数据追加
这部分的功能由管理员或教师实现,教师或管理员登录成功后系统将提示输入新学生的信息,程序则会将新的信息插入原学生信息清单中,并将新的学生信息列表输出,以方便用户的确认。
(8)退出系统,结束任务。
3.性能需求
(a)高效性、稳定性、安全性
(b)人机界面友好,方便操作
(c)维护成本低
二.总体设计
2.系统总体流程图
三.详细设计
1.login()——用户登录
函数作用:用于学生、教师和管理员的登录,三个身份登录成功后有不同的功能选择。
函数过程:用户输入账号密码,函数从txt中提取的链表里比对,正确则跳转选择页面,错误则退出程序。
流程图:
2.main()——主程序
函数用途:给用户选择三种登录方式——教师、学生和管理员。用户也可以选择退出。
流程图:
3.menu()——菜单函数
函数用途:给不同用户不同选择
4.Output()——显示所有学生的数据信息
函数用途:打印所有学生信息
函数过程:while循环连续打印学生信息
流程图:
5.print()——将信息从文件中取出保存到链表中
函数用途:将教师或学生信息从文件中取出保存到链表中,用于后续使用。
函数过程:打开txt文件,分列输入链表,放入链表给后续使用。
流程图:
6.wenjian()——将链表中数据保存在文件中
函数用途:用于录入或修改信息时的录入数据。
函数过程:打开txt,用链表录入
流程图:
7.xuanze()——选择函数
函数用途:给用户选择功能
函数过程:读取用户输入的功能代码,用switch跳转相应函数。
流程图:
四.运行结果
学生成绩
管理员登录
查询老师信息
添加老师信息
录入成功
五.部分源代码
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <iostream>
#include<math.h>
#include<conio.h>
struct student{
char num[20];
char name[20];
int score[3];
int grades;
struct student *next;
};typedef struct student DATE;
struct teacher{
char num[20];
char sex[10];
char name[20];
char course[20];
struct teacher *next;
};
typedef struct teacher DATEA;
void xuanze();
void welcome1();
void welcome();
void loginstu();
void logintea();
void loginadm();
void Menu();
void Menu2();
void xuanze();
void admin();
void Wenjian(DATE *head){ //将链表中数据保存在文件中}
void Wenjiant(DATEA *head){ //将链表中数据保存在文件中}
int icountt;
DATEA *Creatt(){ //教师数据信息创建}
DATEA *Printt(){//将教师信息从文件中取出保存到链表中 }
void Addt(){ //学生数据信息的追加 尾加}
int Changet(){ //教师数据信息修改}
int Deletet(){ //教师数据信息删除}
int Searcht(){ //教师信息查询}
int icount;
DATE *Creat(){ //学生数据信息创建}
DATE *Print(){//将学生信息从文件中取出保存到链表中}
void Output(){ //显示所有学生的数据信息}
void Add(){ //学生数据信息的追加 尾加}
int Change(){ //学生数据信息修改}
int Delete(){ //学生数据信息删除}
int Search(){ //学生数据信息查询}
void welcome1(){//欢迎界面}
void loginstu(){//学生登录}
void logintea(){//老师登录}
void admin(){}
void loginadm(){//管理员登陆}
void Menu(){
printf("\n\n\n");
printf("\t\t************************欢迎访问学生成绩管理系统*************************\n\n\n");
printf("\t\t 1---学生信息数据的录入\n");
printf("\t\t 2---显示所有的学生信息\n");
printf("\t\t 3---学生信息数据追加\n");
printf("\t\t 4---学生信息数据修改\n");
printf("\t\t 5---学生信息数据删除\n");
printf("\t\t 6---学生信息数据查询\n");
printf("\t\t 0---退出系统\n");
printf("\n\n\n\t\t*************************************************************************");
printf("\n\n请在0-8中选择,以回车键结束\n");
}
void Menu2(){}
void xuanze(){}
int main(){
int f;
system("color F0");
welcome1();
scanf("%d",&f);
do{
switch(f){
case 1:logintea();
system("pause");
system("cls");
Menu(); break;
case 2:loginstu();
system("pause");
system("cls");
Menu(); break;
case 3:loginadm();
system("pause");
system("cls");
Menu(); break;
case 0: exit(0) ; break;
}
printf("\n是否继续操作,如果想要退出系统可以选择'0',并按回车键\n");
printf("\n\n请选择:\n");
scanf("%d",&f);
}while(f!=0);
return 0;
}