案例问题描述:
班级是学生生活、学习和成长的重要组织机构。每个班级有很多成员,主要包括课任老师和学生两大类,其中课任老师有分担班级教学工作和管理工作差异;学生除了各科成绩外,也有在班级工作中的分工不同。本实验要求同学们根据自己所在班级成员管理的线性表特性,应用所学的线性表知识设计一个基本的班级管理系统。该系统至少包含新成员入社、老成员退社、成员查询,以及两个班级合并等功能。
具体要求:
- 请用结构体描述班级成员;
- 分别用顺序储存和链式储存两种方式存储班级成员信息;
顺序表实现:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include<cstring>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
//登录存储
typedef struct
{
int storte; //登录用户结构体,包括用户类别(导员,老师,学生)、登录账号、登录密码
char user[20];
char code[20];
}users;
typedef struct {
users *us; //存储登录用户结构体的线性表。
int length;
int listsize;
}Uqlist;
//班级存储模块。
enum random { 未出成绩,不及格,及格,良好,优秀, 未选 }; //枚举类型,表示选修课的成绩。
const int 未出成绩 = 0;
typedef struct sc
{
random xuanxiu1;
random xuanxiu2; //选修课结构体,包括了所有的选修课。
random xuanxiu3;
}sc;
//老师结构体,存储老师信息
typedef struct teacher
{
int jibie; /*导员标记为0,授课老师标记为1*/
char bianhao[20]; //老师编号
char name[20];
char sex[10];
char kemu[20]; //老师教授科目
char callnumber[20]; /*电话号码*/
}teachar;
/*定义一个结构体数组存放学生的信息*/
typedef struct student
{
char number[20]; /*学号*/
char name[20]; /*名字*/
char banjizhiwu[20]; /*班级职务*/
char xueyuan[20]; /*学院*/
char sex[10]; /*性别*/
char cla[20]; /*班级*/
sc xuanxiu; /*选修课*/
int gaoshu; /*必修:高数*/
int xiandai; /*必修:线性代数*/
int yingyu; /*必修:英语*/
int sum; /*总分*/
int average; /*平均分*/
}student;
//存储学生结构体的线性表
typedef struct {
student *stu;
int length;
int listsize;
}Ssqlist;
//存储老师结构体的线性表
typedef struct {
teacher *tea;
int length;
int listsize;
}Tsqlist;
//班级结构体,包括班级名字,学生线性表,老师线性表。
typedef struct clas
{
char classname[20];
Ssqlist stuql;
Tsqlist teaql;
}clas;
/*---------------------------------------------------------------------------------------------------------------*/
//登录用户表的初始构造函数
int InitList_Sq(Uqlist &L)
{
L.us = (users*)malloc(LIST_INIT_SIZE * sizeof(users));
if (!L.us)
exit(0);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return 0;
}
//登录用户表的增加一个新用户的函数(改造自课本24页的算法2.4)-----供 adduser(Uqlist &L)调用。
int listadd(Uqlist &L, users user)
{
if (L.length >= L.listsize)
{
users* newbase;
newbase = (users*)realloc(L.us, (L.listsize + LISTINCREMENT) * sizeof(users));
if (!newbase)
exit(0);
L.us = newbase;
L.listsize += LISTINCREMENT;
}
users *q = &(L.us[L.length]);
*q = user;
++L.length;
printf("恭喜注册成功!");
return 0;
}
//真正实现新用户的添加,实现功能:2.直接注册-----函数内调用listadd(Uqlist &L, users user)
int adduser(Uqlist &L)
{
users temp;
printf("\n请输入您的身份,导员call 0,老师call 1,学生call 2: ");
scanf_s("%d", &temp.storte);
printf("\n请输入您的账号:");
scanf_s("%s", &temp.user, 20);
int label;
printf("\n请输入您的密码:");
scanf_s("%s", &temp.code, 20);
char rcode[20];
printf("\n请再次确认您的密码:");
scanf_s("%s", &rcode, 20);
label = strcmp(temp.code, rcode);
while (label != 0)
{
printf("\n两次密码不相同,请重新输入您的密码:");
scanf_s("%s", temp.code, 20);
char rcode[20];
printf("\n请再次确认您的密码:");
scanf_s("%s", rcode, 20);
label = strcmp(temp.code, rcode);
}
listadd(L, temp);
return 0;
}
//用户账户的注销函数 (改造自课本24页算法2.5)。
int listdelete(Uqlist &L)
{
int stemp;
char zhanghu[20];
printf("\n请输入您的身份(导员:0,老师:1,学生:2): ");
scanf_s("%d", &stemp);
printf("\n请输入您要注销的账户: ");
scanf_s("%s", zhanghu, 20);
if (L.length == 1) {
L.us = NULL;
printf("\n注销成功!");
}
else
{
users *p = L.us;
int m = 1;
for (int i = 0; i <= L.length; i++)
{
if (strcmp(p->user, zhanghu) == 0 && p->storte == stemp)
{
m++;
printf("\n您是否确定要注销账户%s,(是的话输入0,否的话输入1): ", &p->user);
int j;
scanf_s("%d", &j);
if (j == 0)
{
users *q = L.us + L.length - 1;
for (++p; p <= q; ++p)
*(p - 1) = *p;
--L.length;
printf("\n%s账户已注销!", &zhanghu);
break;
}
}
p++;
}
if (m = 1) {
printf("\n未找到账户");
}
}
return 0;
}
//打开用户手册文件,提供 1.阅读用户手册 功能。
int readar()
{
char txt[500] = { '\0' };
errno_t err;
FILE *stream;
if ((err = fopen_s(&stream, "用户手册.txt", "r")) != 0)
{
printf("\n\t\t打开失败");
}
fread(txt, 2, 500, stream);
printf("\n\t\t%s", txt);
/*txt=fgets(txt,100,fp);
printf("%s",txt); */
return 0;
}
void daoyuandenglu(Uqlist &L, clas banjidizhi[20]);
void laoshidenglu(Uqlist &L, clas banjidizhi[20]); //具体实现在后面。
void xueshengdenglu(Uqlist &L, clas banjidizhi[20]);
//登录模块。实现功能:3.直接登陆
void denglu(Uqlist &L, clas banjidizhi[20])
{
char zhanghu[20], code[20];
int temp; //定义两个数组,存放键盘输入的用户名和密码
printf("\n\t\t\t\t用户登录");
printf("\n\t请输入您的身份(导员:0,老师:1,学生:2): ");
scanf_s("%d", &temp);
printf("\n\t\t用户名: ");
/*判断用户名是否存在*/
scanf_s("%s", zhanghu, 20);
users *p = L.us;
char j = '1';
for (int i = L.length; i >= 0; i--)
{
if (strcmp(p->user, zhanghu) == 0 && p->storte == temp)
{
j = '2';
while (j == '2')
{
printf("\t\t密码: ");
scanf_s("%s", &code, 20);
if (strcmp(p->code, code) != 0) //对比输入的密码和读取的密码
{
printf("\n\t\t密码错误(选择1.退出 2.重新输入): ");
j = getchar();
printf("\n");
if (j == '1')
exit(0);
}
else
{
j = '3';
printf("\n登陆成功,欢迎您光临教务系统!------技术支持:田,王,肖,江\n");
switch (temp) /*多重选择实现功能不同的功能*/
{
case 0:
while (1)
{
daoyuandenglu(L, banjidizhi);
}
break;
case 1:
while (1)
{
laoshidenglu(L, banjidizhi);
}
break;
case 2:
while (1)
{
xueshengdenglu(L, banjidizhi);
}
break;
default:
break;
}/*结束switch*/
}
}
break;
}
p++;
}
if (j == '1')
printf("\n对不起未查找到账户");
}
/*界面模块*/
void jiemian(Uqlist &L, clas banjidizhi[20])
{
int cha;
printf("\n**************************** 登陆界面 *******************************");
printf("\n********************** 1.阅读用户手册 **************************");
printf("\n********************** 2.直接注册 **************************");
printf("\n********************** 3.直接登陆 **************************");
printf("\n********************** 4.注销账户 **************************");
printf("\n********************** 5.退出界面 **************************");
printf("\n请选择您要进行的操作:");
scanf_s("%d", &cha);
switch (cha) /*多重选择实现功能不同的功能*/
{
case 1:
readar();
break;
case 2:
adduser(L);
break;
case 3:
denglu(L, banjidizhi);
break;
case 4:
listdelete(L);
break;
case 5:
printf("\n谢谢使用!再见!\n");
exit(0);
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}
//以上实现登录之前的操作
/*---------------------------------------------------------------------------------------------------------------*/
//以下实现三种身份对应的所能选择的操作
//存学生结构体线性表的初始构造。
int initlists(Ssqlist &L)
{
L.stu = (student *)malloc(LIST_INIT_SIZE * sizeof(student));
if (!L.stu)
exit(0);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return 0;
}
//存老师结构体线性表的初始构造。
int initlistt(Tsqlist &L)
{
L.tea = (teachar *)malloc(LIST_INIT_SIZE * sizeof(teachar));
if (!L.tea)
exit(0);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return 0;
}
//实现合并班级
void hebingbanji(clas banjidizhi[20])//传入参数为存有20个班级类型的数组。
{
int i;
int j;
char classtemp1[20];
char classtemp2[20];
printf("\n请输入您要操作的第一个班级:");
scanf_s("%s", classtemp1, 20);
printf("\n请输入您要操作的第二个班级:");
scanf_s("%s", classtemp2, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp1) == 0)
{
break;
}
}
for (j = 0; j <= 20; j++)
{
if (strcmp(banjidizhi[j].classname, classtemp2) == 0)
{
break;
}
}
printf("请输入新合成的班级名字:");
clas temp;
scanf_s("%s", temp.classname, 20);
temp.stuql.listsize = banjidizhi[i].stuql.length + banjidizhi[j].stuql.length;
temp.stuql.stu = (student *)malloc(temp.stuql.listsize * sizeof(student));
if (!temp.stuql.stu)
{
exit(0);//存储分配失败。
}
student * a = banjidizhi[i].stuql.stu;
student * b = banjidizhi[j].stuql.stu;
student *m = temp.stuql.stu;
while (a <= banjidizhi[i].stuql.stu + banjidizhi[i].stuql.length - 1)
{
*m = *a;
*m++;
*a++;
}
while (b <= banjidizhi[j].stuql.stu + banjidizhi[j].stuql.length - 1)
{
*m = *b;
*m++;
*b++;
}
teachar * c = banjidizhi[i].teaql.tea;
teachar * d = banjidizhi[j].teaql.tea;
teacher *n = temp.teaql.tea;
while (c <= banjidizhi[i].teaql.tea + banjidizhi[i].teaql.length - 1)
{
*n++ = *c++;
}
while (d <= banjidizhi[j].teaql.tea + banjidizhi[j].teaql.length - 1)
{
*n++ = *d++;
}
for (int i = 0; i <= 20; i++)
{
if (strcmp(banjidizhi[i].classname, "") == 0)
{
banjidizhi[i] = temp;
printf("新建班级成功");
break;
}
}
}
//新建班级
void makeclass(clas c[20])
{
char nam[20];
printf("请输入您所要添加的班级名字:");
scanf_s("%s", &nam, 20);
for (int i = 0; i <= 20; i++)
{
//if (strlen(c[i].classname) == 0) memset(buff, '\0', sizeof(buff));
if (strcmp(c[i].classname, "") == 0) //
{
memcpy(c[i].classname, nam, 20);/*内存复制函数,将nam中20个字节完整复制到c[i]->classname*/
printf("添加班级成功!");
break;
}
else
{
c++;
}
}
}
//添加学生
void addstudent(clas &c)
{
if (c.stuql.length >= c.stuql.listsize)
{
student* newbase;
newbase = (student*)realloc(c.stuql.stu, (c.stuql.listsize + LISTINCREMENT) * sizeof(student));
if (!newbase)
exit(0);
c.stuql.stu = newbase;
c.stuql.listsize += LISTINCREMENT;
}
student temp;
printf("\n请输入学生学号: ");
scanf_s("%s", temp.number, 20);
printf("\n请输入学生名字: ");
scanf_s("%s", temp.name, 20);
printf("\n请输入学生班级职务: ");
scanf_s("%s", temp.banjizhiwu, 20);
printf("\n请输入学生学院: ");
scanf_s("%s", temp.xueyuan, 20);
printf("\n请输入学生性别: ");
scanf_s("%s", temp.sex, 10);
printf("\n请输入学生班级: ");
scanf_s("%s", temp.cla, 20);
temp.gaoshu = -1;
temp.xiandai = -1;
temp.yingyu = -1;
temp.average = -1;
temp.sum = -1;
temp.xuanxiu.xuanxiu1 = random(未出成绩);
temp.xuanxiu.xuanxiu2 = random(未出成绩);
temp.xuanxiu.xuanxiu3 = random(未出成绩);
student *q = &(c.stuql.stu[c.stuql.length]);
*q = temp;
++c.stuql.length;
printf("添加学生成功!");
}
//添加老师
void addteacher(clas &c)
{
if (c.teaql.length >= c.teaql.listsize)
{
teacher* newbase;
newbase = (teacher*)realloc(c.teaql.tea, (c.teaql.listsize + LISTINCREMENT) * sizeof(teacher));
if (!newbase)
exit(0);
c.teaql.tea = newbase;
c.teaql.listsize += LISTINCREMENT;
}
teacher temp;
printf("\n请输入老师级别: ");
scanf_s("%d", &temp.jibie);
printf("\n请输入老师编号: ");
scanf_s("%s", temp.bianhao, 20);
printf("\n请输入老师姓名: ");
scanf_s("%s", temp.name, 20);
printf("\n请输入老师性别: ");
scanf_s("%s", temp.sex, 10);
printf("\n请输入老师教授科目: ");
scanf_s("%s", temp.kemu, 20);
printf("\n请输入老师电话号码: ");
scanf_s("%s", temp.callnumber, 20);
teacher *q = &(c.teaql.tea[c.teaql.length]);
*q = temp;
++c.teaql.length;
printf("添加老师成功!");
}
//删除学生
void deletestudent(clas &c)
{
char temp[20];
int k = 0;
printf("\n请输入您要注销的学生学号:");
scanf_s("%s", temp, 20);
student *p = c.stuql.stu;
if (c.stuql.length == 0 && strcmp(p->number, temp) == 0) {
c.stuql.stu = NULL;
printf("\n账户已注销!");
}
for (int i = c.stuql.length; i > 0; i--)
{
if (strcmp(p->number, temp) == 0)
{
int j;
k = 1;
printf("\n您是否确定要注销账户%s,(选择:是输入0,否输入1): ", p->number);
scanf_s("%d", &j);
if (j == 0)
{
student *q = c.stuql.stu + c.stuql.length - 1;
for (++p; p <= q; ++p)
*(p - 1) = *p;
--c.stuql.length;
printf("\n账户已注销!");
break;
}
else
break;
}
p++;
}
if (k == 0)
{
printf("\n未找到账户");
}
}
//修改学生信息。
void restudent(clas &c)
{
char temp[20];
int j = 0;
printf("\n请输入您要修改的学生学号:");
scanf_s("%s", temp, 20);
student *p = c.stuql.stu;
for (int i = c.stuql.length; i > 0; i--)
{
if (strcmp(p->number, temp) == 0)
{
j = 1;
printf("\n请输入学生学号: ");
scanf_s("%s", c.stuql.stu->number, 20);
printf("\n请输入学生名字: ");
scanf_s("%s", c.stuql.stu->name, 20);
printf("\n请输入学生班级职务: ");
scanf_s("%s", c.stuql.stu->banjizhiwu, 20);
printf("\n请输入学生学院: ");
scanf_s("%s", c.stuql.stu->xueyuan, 20);
printf("\n请输入学生性别: ");
scanf_s("%s", c.stuql.stu->sex, 2);
printf("\n请输入学生班级: ");
scanf_s("%s", c.stuql.stu->cla, 20);
printf("修改成功!");
break;
}
p++;
}
if (j == 0)
{
printf("\n未找到账户");
}
}
void printff(random a)
{
switch (a)
{
case 0:
printf("未出成绩");
break;
case 1:
printf("不及格");
break;
case 2:
printf("及格");
break;
case 3:
printf("良好");
break;
case 4:
printf("优秀");
break;
case 5:
printf("未选");
break;
case 6:
printf("未出成绩");
break;
}
}
//输出学生的各个信息。供lookstudentxuehao(clas * c),lookstudentname(clas * c)调用。
void printt(student* s)
{
printf("\n学号: %s", s->number);
printf("\n姓名: %s", s->name);
printf("\n班级职务: %s", s->banjizhiwu);
printf("\n学院: %s", s->xueyuan);
printf("\n性别: %s", s->sex);
printf("\n班级: %s", s->cla);
printf("\n选修1成绩: ");
printff(s->xuanxiu.xuanxiu1);
printf("\n选修2成绩: ");
printff(s->xuanxiu.xuanxiu2);
printf("\n选修3成绩: ");
printff(s->xuanxiu.xuanxiu3);
printf("\n高数成绩: %d", s->gaoshu);
printf("\n现代成绩: %d", s->xiandai);
printf("\n英语成绩: %d", s->yingyu);
s->sum = s->gaoshu + s->xiandai + s->yingyu;
printf("\n总成绩: %d", s->sum);
s->average = s->sum / 3;
printf("\n平均成绩: %d", s->average);
}
//以学号为索引查询学生
void lookstudentxuehao(clas c)
{
char temp[20];
int i,m;
printf("\n请输入您要查找的学生学号:");
scanf_s("%s", temp, 20);
student *p = c.stuql.stu;
for (m=0,i = 0; i <= 20; i++)
{
if (strcmp(p->number, temp) == 0)
{
m = 1;
printt(p);
break;
}
p++;
}
if (m == 0)
{
printf("\n未找到账户\n");
}
}
//以学生姓名为索引查询学生。
void lookstudentname(clas c)
{
char temp[20];
int j = 0;
printf("\n请输入您要查找的学生姓名:");
scanf_s("%s", temp, 20);
student *p = c.stuql.stu;
for (int i = c.stuql.length; i >= 0; i--)
{
if (strcmp(p->name, temp) == 0)
{
j = 1;
printt(p);
break;
}
p++;
}
if (j == 0)
{
printf("\n未找到账户");
}
}
//学生查询,调用lookstudentxuehao(clas * c),lookstudentname(clas * c)
void lookstudent(clas c)
{
printf("请输入您要查询的方式(学号查询请按1,姓名查询请按2):");
int tem;
scanf_s("%d", &tem);
switch (tem) /*多重选择实现功能不同的功能*/
{
case 1:
lookstudentxuehao(c);
break;
case 2:
lookstudentname(c);
break;
default:
printf("\n按键错误!请重新选择!\n");
}
}
//导员查询班级总体成绩。
void grade(clas p)
{
int choice;
printf("\n1.查询全班高数成绩");
printf("\n2.查询全班高数平均成绩");
printf("\n3.查询全班现代函数成绩");
printf("\n4.查询全班现代函数平均成绩");
printf("\n5.查询全班英语成绩");
printf("\n6.查询全班英语平均成绩");
printf("\n7.查询全班选修1成绩");
printf("\n8.查询全班选修2成绩");
printf("\n9.查询全班选修3成绩");
printf("\n0.查询全班总平均分");
printf("\n请输入您的选择:");
scanf_s("%d", &choice);
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
{
student * q = p.stuql.stu;
int av, sum = 0;
for (int i = 0; i < p.stuql.length; i++)
{
sum += q->average;
q++;
}
av = sum / p.stuql.length;
printf("\n全班总平均分: %d", av);
}
break;
case 1:
{
student * q = p.stuql.stu;
printf("\n数学成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->gaoshu);
q++;
}
}
break;
case 2:
{
student * q = p.stuql.stu;
int av, sum = 0;
for (int i = 1; i <= p.stuql.length; i++)
{
sum += q->gaoshu;
}
av = sum / p.stuql.length;
printf("全班高数平均成绩: %d", av);
}
break;
case 3:
{
student * q = p.stuql.stu;
printf("\n线代成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->xiandai);
q++;
}
}
break;
case 4:
{
student * q = p.stuql.stu;
int av, sum = 0;
for (int i = 1; i <= p.stuql.length; i++)
{
sum += q->xiandai;
}
av = sum / p.stuql.length;
printf("全班线代平均成绩: %d", av);
}
break;
case 5:
{
student * q = p.stuql.stu;
printf("\n英语成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->yingyu);
q++;
}
}
break;
case 6:
{
student * q = p.stuql.stu;
int av, sum = 0;
for (int i = 1; i <= p.stuql.length; i++)
{
sum += q->yingyu;
}
av = sum / p.stuql.length;
printf("全班英语平均分: %d", av);
}
break;
case 7:
{
student * q = p.stuql.stu;
printf("\n选修1成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->xuanxiu.xuanxiu1);
q++;
}
}
break;
case 8:
{
student * q = p.stuql.stu;
printf("\n选修2成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->xuanxiu.xuanxiu2);
q++;
}
}
break;
case 9:
{
student * q = p.stuql.stu;
printf("\n选修3成绩:");
for (int i = 1; i <= p.stuql.length; i++)
{
printf("\n%s", q->name);
printf("\t\t\t%d", q->xuanxiu.xuanxiu3);
q++;
}
}
break;
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}
//科任老师录入成绩。
void addgrade(clas &c)
{
int choice;
student * s = c.stuql.stu;
printf("\n请输入您要输入成绩的科目:");
printf("\n1.高数");
printf("\n2.现性代数");
printf("\n3.英语");
printf("\n4.选修1");
printf("\n5.选修2");
printf("\n6.选修3\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t请输入成绩: ", s->name);
scanf_s("%d", &s->gaoshu);
s++;
}
}
break;
case 2:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t: ", s->name);
scanf_s("%d", &s->xiandai);
s++;
}
}
break;
case 3:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t: ", s->name);
scanf_s("%d", &s->yingyu);
s++;
}
}
break;
case 4:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t: ", s->name);
scanf_s("%d", &s->xuanxiu.xuanxiu1);
s++;
}
}
break;
case 5:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t: ", s->name);
scanf_s("%d", &s->xuanxiu.xuanxiu2);
s++;
}
}
break;
case 6:
{
for (int i = 1; i <= c.stuql.length; i++)
{
printf("\n%s\t: ", s->name);
scanf_s("%d", &s->xuanxiu.xuanxiu3);
s++;
}
}
break;
default:
break;
}
}
//科任老师查询成绩。
void lookgrade(clas c)
{
grade(c);
}
//学生查询成绩。
void slookgra(clas c)
{
lookstudent(c);
}
//学生查询老师信息。
void slooktea(clas c)
{
char temp[20];
int tt;
printf("\n*************************************");
printf("\n请输入您要选择的查询方式(查询老师姓名请按1,查询老师科目请按2):");
scanf_s("%d", &tt);
switch (tt)
{
case 1:
{
printf("\n请输入您要查找的老师姓名:");
scanf_s("%s", temp, 20);
teacher *p = c.teaql.tea;
for (int i = c.teaql.length; i >= 0; i--)
{
if (strcmp(p->name, temp) == 0)
{
printf("老师的编号: %s", p->bianhao);
printf("\n老师的级别: %d", p->jibie);
printf("\n老师的姓名: %s", p->name);
printf("\n老师的任课科目: %s", p->kemu);
printf("\n老师的性别: %s", p->sex);
printf("\n老师的联系方式: %s", p->callnumber);
break;
}
p++;
}
printf("\n未找到账户");
}
break;
case 2:
{
printf("\n请输入您要查找的老师科目:");
scanf_s("%s", temp, 20);
teacher *p = c.teaql.tea;
for (int i = c.teaql.length; i >= 0; i--)
{
if (strcmp(p->kemu, temp) == 0)
{
printf("老师的编号: %s", p->bianhao);
printf("老师的级别: %d", p->jibie);
printf("\n老师的姓名: %s", p->name);
printf("\n老师的任课科目: %s", p->kemu);
printf("\n老师的性别: %s", p->sex);
printf("\n老师的联系方式: %s", p->callnumber);
break;
}
p++;
}
printf("\n未找到账户");
}
break;
default:
break;
}
}
//导员登录界面
void daoyuandenglu(Uqlist &L, clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* 亲爱的导员 *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.增加学生 ****************************\n");
printf("************************* 2.删除学生 ****************************\n");
printf("************************* 3.修改学生信息 ****************************\n");
printf("************************* 4.查询学生信息 ****************************\n");
printf("************************* 5.学生成绩统计操作 ****************************\n");
printf("************************* 6.添加班级 ****************************\n");
printf("************************* 7.合并班级 ****************************\n");
printf("************************* 8.添加老师 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作: ");
scanf_s("%d", &choice);
if (choice != 0 && choice != 6 && choice != 7)
{
printf("\n请输入您所要操作的班级: ");
char classtemp[20];
scanf_s("%s", classtemp, 20);
int m;
for (m=0,i = 0; i <= 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
m = 1;
break;
}
}
if (m == 0) {
printf("\n未查找到班级");
choice = 9;
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(L, banjidizhi);
}
case 1:
addstudent(banjidizhi[i]);
break;
case 2:
deletestudent(banjidizhi[i]);
break;
case 3:
restudent(banjidizhi[i]);
break;
case 4:
lookstudent(banjidizhi[i]);
break;
case 5:
grade(banjidizhi[i]);
break;
case 6:
makeclass(banjidizhi);
break;
case 7:
hebingbanji(banjidizhi);
break;
case 8:
addteacher(banjidizhi[i]);
default:
printf("\n按键错误!请重新选择!\n");
daoyuandenglu(L, banjidizhi);
}/*结束switch*/
}
//老师登录界面。
void laoshidenglu(Uqlist &L, clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* 亲爱的老师 *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.学生成绩写入 ****************************\n");
printf("************************* 2.查询学生成绩 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作:");
scanf_s("%d", &choice);
if (choice != 0)
{
printf("请输入您所要操作的班级: ");
char classtemp[20];
scanf_s("%s", &classtemp, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
break;
}
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(L, banjidizhi);
}
break;
case 1:
addgrade(banjidizhi[i]);
break;
case 2:
lookgrade(banjidizhi[i]);
break;
default:
printf("\n按键错误!请重新选择!\n");
laoshidenglu(L, banjidizhi);
}/*结束switch*/
}
//学生登录界面。
void xueshengdenglu(Uqlist &L, clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* Hello,学生! *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.查询信息 ****************************\n");
printf("************************* 2.查询科任老师信息 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作: ");
scanf_s("%d", &choice);
if (choice != 0)
{
printf("请输入您所要操作的班级: ");
char classtemp[20];
scanf_s("%s", &classtemp, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
break;
}
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(L, banjidizhi);
}
break;
case 1:
slookgra(banjidizhi[i]);
break;
case 2:
slooktea(banjidizhi[i]);
break;
default:
printf("\n按键错误!请重新选择!\n");
xueshengdenglu(L, banjidizhi);
}/*结束switch*/
}
int main()
{
Uqlist L;
InitList_Sq(L);
clas banjidizhi[20];
for (int i = 0; i < 20; i++)
{
memset(banjidizhi[i].classname, '\0', sizeof(banjidizhi[i].classname));
initlists(banjidizhi[i].stuql);
initlistt(banjidizhi[i].teaql);
}
while (1)
{
jiemian(L, banjidizhi);
}
system("pause");
return 0;
}
链表实现:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include<cstring>
#include<malloc.h>
//登录存储
typedef struct
{
int storte; //登录用户结构体,包括用户类别(导员,老师,学生)、登录账号、登录密码
char user[20];
char code[20];
}users;
typedef struct uslnode
{
users date;
struct uslnode *next;
}uslnode, *LinkList;
LinkList L;
void InitList(LinkList L)
{
L = new uslnode;
L->next = NULL;
}
//班级存储模块。
enum random { 未出成绩,不及格,及格,良好,优秀, 未选 }; //枚举类型,表示选修课的成绩。
const int 未出成绩 = 0;
typedef struct sc
{
random xuanxiu1;
random xuanxiu2; //选修课结构体,包括了所有的选修课。
random xuanxiu3;
}sc;
//老师结构体,存储老师信息
typedef struct teacher
{
int jibie; /*导员标记为0,授课老师标记为1*/
char bianhao[20]; //老师编号
char name[20];
char sex[10];
char kemu[20]; //老师教授科目
char callnumber[20]; /*电话号码*/
}teachar;
typedef struct telnode
{
teachar tedate;
struct telnode *next;
}telnode, *TElinklist;
/*定义一个结构体数组存放学生的信息*/
typedef struct student
{
char number[20]; /*学号*/
char name[20]; /*名字*/
char banjizhiwu[20]; /*班级职务*/
char xueyuan[20]; /*学院*/
char sex[10]; /*性别*/
char cla[20]; /*班级*/
sc xuanxiu; /*选修课*/
int gaoshu; /*必修:高数*/
int xiandai; /*必修:线性代数*/
int yingyu; /*必修:英语*/
int sum; /*总分*/
int average; /*平均分*/
}student;
typedef struct stlnode
{
student stdate;
struct stlnode *next;
}stlnode, *STlinklist;
//班级结构体,包括班级名字,学生线性表,老师线性表。
typedef struct clas
{
char classname[20];
TElinklist teL;
STlinklist stL;
}clas;
/*---------------------------------------------------------------------------------------------------------------*/
//实现新用户的添加
int adduser()
{
uslnode *r;
r = L; //r指向最后一个。
if (r->next != NULL)
{
r = r->next;
}
uslnode *p;
p = (uslnode *)malloc(sizeof(uslnode));
printf("\n请输入您的身份,导员call 0,老师call 1,学生call 2。");
scanf_s("%d", &p->date.storte);
printf("\n请输入您的账号:");
scanf_s("%s", p->date.user, 20);
printf("\n请输入您的密码:");
scanf_s("%s", p->date.code, 20);
char rcode[20];
printf("\n请再次确认您的密码:");
scanf_s("%s", rcode, 20);
while (strcmp(p->date.code, rcode) != 0)
{
printf("\n两次密码不相同,请重新输入您的密码:");
scanf_s("%s", p->date.code, 20);
printf("\n请再次确认您的密码:");
scanf_s("%s", rcode, 20);
}
r->next = p;
r = p;
r->next = NULL;
printf("注册成功!!╰( ̄▽ ̄)╮\n");
return 0;
}
//用户账户的注销函数
int listdelete()
{
int stemp;
char zhanghu[20];
printf("\n请输入您的身份(导员:0,老师:1,学生:2)");
scanf_s("%d", &stemp);
printf("\n请输入您要注销的账户");
scanf_s("%s", zhanghu, 20);
uslnode *p;
p = L;
while ((strcmp(p->next->date.user, zhanghu) != 0 || p->next->date.storte != stemp) && p->next)
{
p = p->next;
}
if (p->next != NULL)
{
printf("\n您是否确定要注销账户%s,(是的话输入0,否的话输入1)", p->next->date.user);
int j;
scanf_s("%d", &j);
if (j == 0)
{
uslnode *s;
s = p->next;
p->next = s->next;
free(s);
printf("/n注销成功!!╰( ̄▽ ̄)╮\n");
}
}
else
{
printf("/n对不起,没找到账户!");
}
return 0;
}
//打开用户手册文件,提供 1.阅读用户手册 功能。
int readar()
{
char txt[500] = { '\0' };
errno_t err;
FILE *stream;
if ((err = fopen_s(&stream, "用户手册.txt", "r")) != 0)
{
printf("\n\t\t打开失败");
}
fread(txt, 2, 500, stream);
printf("\n\t\t%s", txt);
/*txt=fgets(txt,100,fp);
printf("%s",txt); */
return 0;
}
void daoyuandenglu(clas banjidizhi[20]);
void laoshidenglu(clas banjidizhi[20]); //具体实现在后面。
void xueshengdenglu(clas banjidizhi[20]);
//登录模块。实现功能:3.直接登陆
void denglu(clas banjidizhi[20])
{
char zhanghu[20], code[20];
int temp; //定义两个数组,存放键盘输入的用户名和密码
printf("\n\t\t\t\t用户登录");
printf("\n\t请输入您的身份(导员:0,老师:1,学生:2)");
scanf_s("%d", &temp);
printf("\n\t\t用户名:");
/*判断用户名是否存在*/
scanf_s("%s", zhanghu, 20);
uslnode *p;
p = L;
while ((strcmp(p->date.user, zhanghu) != 0 || p->date.storte != temp) && p->next)
{
p = p->next;
}
if (strcmp(p->date.user, zhanghu) == 0 && p->date.storte == temp)
{
printf("\t\t密 码:");
scanf_s("%s", &code, 20);
while (strcmp(p->date.code, code) != 0) //对比输入的密码和读取的密码
{
int j;
printf("\n\t\t密码错误(1.退出 2.重新输入)");
scanf_s("%d", &j);
if (j == 1)
{
exit(0);
}
else
{
printf("\t\t密 码:");
scanf_s("%s", &code, 20);
continue;
}
}
printf("\n登陆成功,欢迎您光临教务系统!------技术支持:田,王,肖,江");
switch (temp) /*多重选择实现功能不同的功能*/
{
case 0:
while (1)
{
daoyuandenglu(banjidizhi);
}
break;
case 1:
while (1)
{
laoshidenglu(banjidizhi);
}
break;
case 2:
while (1)
{
xueshengdenglu(banjidizhi);
}
break;
default:
break;
}/*结束switch*/
}
else
{
printf("\n对不起,没找到账户!");
}
}
/*界面模块*/
void jiemian(clas banjidizhi[20])
{
int cha;
printf("\n**************************** 登陆界面 *******************************");
printf("\n********************** 1.阅读用户手册 **************************");
printf("\n********************** 2.直接注册 **************************");
printf("\n********************** 3.直接登陆 **************************");
printf("\n********************** 4.注销账户 **************************");
printf("\n********************** 5.退出界面 **************************");
printf("\n请选择您要进行的操作:");
scanf_s("%d", &cha);
switch (cha) /*多重选择实现功能不同的功能*/
{
case 1:
readar();
break;
case 2:
adduser();
break;
case 3:
denglu(banjidizhi);
break;
case 4:
listdelete();
break;
case 5:
printf("\n谢谢使用!再见!\n");
exit(0);
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}
//以上实现登录之前的操作
/*---------------------------------------------------------------------------------------------------------------*/
//以下实现三种身份对应的所能选择的操作
//存学生结构体线性表的初始构造。
/*void STInitList(STlinklist L)
{
L = new stlnode;
L->next = NULL;
}
//存老师结构体线性表的初始构造。
void TEInitList(TElinklist L)
{
L = new telnode;
L->next = NULL;
}*/
//班级结构体初始化
void initclass(clas &c)
{
memset(c.classname, '\0', sizeof(c.classname));
c.stL = new stlnode;
c.stL->next = NULL;
c.teL = new telnode;
c.teL->next = NULL;
}
void hebingbanji(clas banjidizhi[20])//传入参数为存有20个班级类型的数组。
{
int i, j, k;
char classtemp1[20];
char classtemp2[20];
printf("\n请输入您要操作的第一个班级:");
scanf_s("%s", &classtemp1, 20);
printf("\n请输入您要操作的第二个班级:");
scanf_s("%s", &classtemp2, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp1) == 0)
{
break;
}
}
for (j = 0; j <= 20; j++)
{
if (strcmp(banjidizhi[j].classname, classtemp2) == 0)
{
break;
}
}
printf("%d,%d", i, j);
stlnode *s = banjidizhi[i].stL;
telnode *t = banjidizhi[i].teL;
while (s->next != NULL)
{
s++;
}
while (t->next != NULL)
{
t++;
}
s->next = banjidizhi[j].stL->next;
t->next = banjidizhi[j].teL->next;
printf("\n请输入新合成的班级名字:");
scanf_s("%s", banjidizhi[i].classname, 20);
memset(banjidizhi[j].classname, '\0', sizeof(banjidizhi[j].classname));
banjidizhi[j].stL = NULL;
banjidizhi[j].teL = NULL;
printf("合并班级成功!!");
}
//新建班级
void makeclass(clas c[20])
{
char nam[20];
printf("请输入您所要添加的班级名字:");
scanf_s("%s", nam, 20);
for (int i = 0; i <= 20; i++)
{
if (strcmp(c[i].classname, "") == 0) //
{
memcpy(c[i].classname, nam, 20);/*内存复制函数,将nam中20个字节完整复制到c[i]->classname*/
printf("添加班级成功!");
break;
}
else
c++;
}
}
//添加学生
void addstudent(clas &c)
{
stlnode *r;
r = c.stL; //r指向最后一个。
while (r->next != NULL)
{
r = r->next;
}
stlnode *p;
p = (stlnode *)malloc(sizeof(stlnode));
printf("\n请输入学生学号:");
scanf_s("%s", p->stdate.number, 20);
printf("\n请输入学生名字:");
scanf_s("%s", p->stdate.name, 20);
printf("\n请输入学生班级职务:");
scanf_s("%s", p->stdate.banjizhiwu, 20);
printf("\n请输入学生学院:");
scanf_s("%s", p->stdate.xueyuan, 20);
printf("\n请输入学生性别:");
scanf_s("%s", p->stdate.sex, 10);
printf("\n请输入学生班级:");
scanf_s("%s", p->stdate.cla, 20);
p->stdate.gaoshu = -1;
p->stdate.xiandai = -1;
p->stdate.yingyu = -1;
p->stdate.average = -1;
p->stdate.sum = -1;
p->stdate.xuanxiu.xuanxiu1 = random(未出成绩);
p->stdate.xuanxiu.xuanxiu2 = random(未出成绩);
p->stdate.xuanxiu.xuanxiu3 = random(未出成绩);
r->next = p;
r = p;
r->next = NULL;
printf("添加成功!!╰( ̄▽ ̄)╮\n");
}
//添加老师
void addteacher(clas &c)
{
telnode *r;
r = c.teL;
//r指向最后一个。
while (r->next != NULL)
{
r = r->next;
}
telnode *p;
p = (telnode *)malloc(sizeof(telnode));
printf("\n请输入老师级别:");
scanf_s("%d", &p->tedate.jibie);
printf("\n请输入老师编号:");
scanf_s("%s", p->tedate.bianhao, 20);
printf("\n请输入老师姓名:");
scanf_s("%s", p->tedate.name, 20);
printf("\n请输入老师性别:");
scanf_s("%s", p->tedate.sex, 10);
printf("\n请输入老师教授科目:");
scanf_s("%s", p->tedate.kemu, 20);
printf("\n请输入老师电话号码:");
scanf_s("%s", p->tedate.callnumber, 20);
r->next = p;
r = p;
r->next = NULL;
printf("添加成功!!╰( ̄▽ ̄)╮\n");
}
//删除学生
void deletestudent(clas &c)
{
char temp[20];
printf("\n请输入您要删除的学生学号:");
scanf_s("%s", temp, 20);
stlnode *p;
p = c.stL;
while (strcmp(p->next->stdate.number, temp) != 0 /*&& p->next*/)
{
p = p->next;
}
if (strcmp(p->next->stdate.number, temp) == 0)
{
printf("\n您是否确定要注销账户%s,(是的话输入0,否的话输入1)", p->next->stdate.number);
int j;
scanf_s("%d", &j);
if (j == 0)
{
stlnode *s;
s = p->next;
p->next = s->next;
free(s);
printf("\n注销成功!!╰( ̄▽ ̄)╮\n");
}
}
else
{
printf("\n对不起,没找到账户!");
}
}
//修改学生信息。
void restudent(clas &c)
{
char temp[20];
printf("\n请输入您要修改的学生学号:");
scanf_s("%s", temp, 20);
stlnode *p;
p = c.stL;
while (strcmp(p->next->stdate.number, temp) != 0 && p->next)
{
p = p->next;
}
if (strcmp(p->next->stdate.number, temp) == 0)
{
printf("\n您是否确定要修改账户%s,(是的话输入0,否的话输入1)", p->next->stdate.number);
int j;
scanf_s("%d", &j);
if (j == 0)
{
printf("\n请输入学生学号:");
scanf_s("%s", p->next->stdate.number, 20);
printf("\n请输入学生名字:");
scanf_s("%s", p->next->stdate.name, 20);
printf("\n请输入学生班级职务:");
scanf_s("%s", p->next->stdate.banjizhiwu, 20);
printf("\n请输入学生学院:");
scanf_s("%s", p->next->stdate.xueyuan, 20);
printf("\n请输入学生性别:");
scanf_s("%s",p->next->stdate.sex, 2);
printf("\n请输入学生班级:");
scanf_s("%s", p->next->stdate.cla, 20);
printf("\n修改成功");
}
}
else
{
printf("/n对不起,没找到账户!");
}
}
void printff(random a)
{
switch (a)
{
case 0:
printf("未出成绩");
break;
case 1:
printf("不及格");
break;
case 2:
printf("及格");
break;
case 3:
printf("良好");
break;
case 4:
printf("优秀");
break;
case 5:
printf("未选");
break;
case 6:
printf("未出成绩");
break;
}
}
//输出学生的各个信息。供lookstudentxuehao(clas * c),lookstudentname(clas * c)调用。
void printt(student* s)
{
printf("\n学号: %s", s->number);
printf("\n姓名: %s", s->name);
printf("\n班级职务: %s", s->banjizhiwu);
printf("\n学院: %s", s->xueyuan);
printf("\n性别: %s", s->sex);
printf("\n班级: %s", s->cla);
printf("\n选修1成绩: ");
printff(s->xuanxiu.xuanxiu1);
printf("\n选修2成绩: ");
printff(s->xuanxiu.xuanxiu2);
printf("\n选修3成绩: ");
printff(s->xuanxiu.xuanxiu3);
printf("\n高数成绩: %d", s->gaoshu);
printf("\n现代成绩: %d", s->xiandai);
printf("\n英语成绩: %d", s->yingyu);
printf("\n总成绩: %d", s->sum);
printf("\n平均成绩: %d", s->average);
}
//以学号为索引查询学生
void lookstudentxuehao(clas c)
{
char temp[20];
printf("\n请输入您要查找的学生学号:");
scanf_s("%s", &temp, 20);
stlnode *p;
p = c.stL;
while (strcmp(p->stdate.number, temp) != 0 && p->next )
{
p = p->next;
}
if (strcmp(p->stdate.number, temp) == 0)
{
printt(&p ->stdate);
}
else
{
printf("/n对不起,没找到账户!");
}
}
//以学生姓名为索引查询学生。
void lookstudentname(clas c)
{
char temp[20];
printf("\n请输入您要查找的学生姓名:");
scanf_s("%s", temp, 20);
stlnode *p;
p = c.stL;
while (strcmp(p->stdate.name, temp) != 0 && p->next != NULL && p != NULL)
{
p = p->next;
}
if (strcmp(p->stdate.name, temp) == 0)
{
printt(&p->stdate);
}
else
{
printf("/n对不起,没找到账户!");
}
}
//学生查询,调用lookstudentxuehao(clas * c),lookstudentname(clas * c)
void lookstudent(clas c)
{
printf("****************************");
printf("请输入您要查询的方式(学号查询请按1,姓名查询请按2):");
int tem;
scanf_s("%d", &tem);
switch (tem) /*多重选择实现功能不同的功能*/
{
case 1:
lookstudentxuehao(c);
break;
case 2:
lookstudentname(c);
break;
default:
printf("\n按键错误!请重新选择!\n");
}
}
//导员查询班级总体成绩。
void grade(clas c)
{
int choice;
printf("\n1.查询全班高数成绩。");
printf("\n2.查询全班高数平均成绩。");
printf("\n3.查询全班现代函数成绩。");
printf("\n4.查询全班现代函数平均成绩。");
printf("\n5.查询全班英语成绩。");
printf("\n6.查询全班英语平均成绩。");
printf("\n7.查询全班选修1成绩。");
printf("\n8.查询全班选修2成绩。");
printf("\n9.查询全班选修3成绩。");
printf("\n0.查询全班总平均分");
printf("\n请输入您的选择:");
scanf_s("%d", &choice);
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
{
stlnode *p;
p = c.stL;
int av, i = 0, sum = 0;
while (p->next)
{
sum += p->next->stdate.average;
i++;
}
av = sum / i;
printf("\n全班总平均分:%d", av);
}
break;
case 1:
{
stlnode *p;
p = c.stL;
printf("\n数学成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.gaoshu);
p = p->next;
}
}
break;
case 2:
{
stlnode *p;
p = c.stL;
int av, i = 0, sum = 0;
while (p->next)
{
sum += p->next->stdate.average;
i++;
}
av = sum / i;
printf("全班高数平均成绩:%d", av);
}
break;
case 3:
{
stlnode *p;
p = c.stL;
printf("\n现代成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.xiandai);
p = p->next;
}
}
break;
case 4:
{
stlnode *p;
p = c.stL;
int av, i = 0, sum = 0;
while (p->next)
{
sum += p->next->stdate.xiandai;
i++;
}
av = sum / i;
printf("\n全班现代平均成绩:%d", av);
}
break;
case 5:
{
stlnode *p;
p = c.stL;
printf("\n英语成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.yingyu);
p = p->next;
}
}
break;
case 6:
{
stlnode *p;
p = c.stL;
int av, i = 0, sum = 0;
while (p->next)
{
sum += p->next->stdate.yingyu;
i++;
}
av = sum / i;
printf("\n全班英语平均分:%d", av);
}
break;
case 7:
{
stlnode *p;
p = c.stL;
printf("\n选修1成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.xuanxiu.xuanxiu1);
p = p->next;
}
}
break;
case 8:
{
stlnode *p;
p = c.stL;
printf("\n选修2成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.xuanxiu.xuanxiu2);
p = p->next;
}
}
break;
case 9:
{
stlnode *p;
p = c.stL;
printf("\n选修3成绩:");
while (p->next)
{
printf("\n%s", p->next->stdate.name);
printf("\t\t\t%d", p->next->stdate.xuanxiu.xuanxiu3);
p = p->next;
}
}
break;
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}
//科任老师录入成绩。
void addgrade(clas &c)
{
int choice;
stlnode *p;
p = c.stL;
printf("\n请输入您要输入成绩的科目:");
printf("\n1.高数。");
printf("\n2.现性代数。");
printf("\n3.英语。");
printf("\n4.选修1。");
printf("\n5.选修2。");
printf("\n6.选修3。\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.gaoshu);
p = p->next;
}
}
break;
case 2:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.xiandai);
p = p->next;
}
}
break;
case 3:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.yingyu);
p = p->next;
}
}
break;
case 4:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.xuanxiu.xuanxiu1);
p = p->next;
}
}
break;
case 5:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.xuanxiu.xuanxiu2);
p = p->next;
}
}
break;
case 6:
{
while (p->next)
{
printf("\n%s\t请输入成绩: ", p->next->stdate.name);
scanf_s("%d", &p->next->stdate.xuanxiu.xuanxiu3);
p = p->next;
}
}
break;
default:
break;
}
}
//科任老师查询成绩。
void lookgrade(clas c)
{
grade(c);
}
//学生查询成绩。
void slookgra(clas c)
{
lookstudent(c);
}
//学生查询老师信息。
void slooktea(clas c)
{
char temp[20];
int tt;
printf("\n*************************************");
printf("\n请输入您要选择的查询方式(查询老师姓名请按1,查询老师科目请按2):");
scanf_s("%d", &tt);
switch (tt)
{
case 1:
{
printf("\n请输入您要查找的老师姓名:");
scanf_s("%s", temp, 20);
telnode *p;
p = c.teL;
while (strcmp(p->next->tedate.name, temp) != 0 && p->next)
{
p = p->next;
}
if (p->next != NULL)
{
printf("\n老师的级别: %d", p->next ->tedate .jibie );
printf("\n老师的编号: %s", p->next->tedate.bianhao);
printf("\n老师的姓名: %s", p->next->tedate.name);
printf("\n老师的性别:%s", p->next->tedate.sex);
printf("\n老师的教授科目: %s", p->next->tedate.kemu);
printf("\n老师的联系方式: %s", p->next->tedate.callnumber);
}
else
{
printf("\n对不起,该老师不存在!");
}
break;
}
case 2:
{
printf("\n请输入您要查找的老师科目:");
scanf_s("%s", temp, 20);
telnode *p;
p = c.teL;
while (strcmp(p->next->tedate.kemu, temp) != 0 && p->next)
{
p = p->next;
}
if (p->next != NULL)
{
printf("\n老师的姓名:%s", p->next->tedate.name);
printf("\n老师的教授科目:%s", p->next->tedate.kemu);
printf("\n老师的性别:%s", p->next->tedate.sex);
printf("\n老师的联系方式:%s", p->next->tedate.callnumber);
}
else
{
printf("\n对不起,该老师不存在!");
}
}
break;
default:
break;
}
}
//导员登录界面
void daoyuandenglu(clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* 亲爱的导员 *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.增加学生 ****************************\n");
printf("************************* 2.删除学生 ****************************\n");
printf("************************* 3.修改学生信息 ****************************\n");
printf("************************* 4.查询学生信息 ****************************\n");
printf("************************* 5.学生成绩统计操作 ****************************\n");
printf("************************* 6.添加班级 ****************************\n");
printf("************************* 7.合并班级 ****************************\n");
printf("************************* 8.添加老师 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作: ");
scanf_s("%d", &choice);
if (choice != 0 && choice != 6 && choice != 7)
{
printf("\n请输入你所要操作的班级。");
char classtemp[20];
scanf_s("%s", classtemp, 20);
int m = 0;
for (i = 0; i <= 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
printf("111");
m = 1;
break;
}
}
if (m == 0) {
printf("\n未查找到班级");
choice = 9;
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(banjidizhi);
}
case 1:
addstudent(banjidizhi[i]);
break;
case 2:
deletestudent(banjidizhi[i]);
break;
case 3:
restudent(banjidizhi[i]);
break;
case 4:
lookstudent(banjidizhi[i]);
break;
case 5:
grade(banjidizhi[i]);
break;
case 6:
makeclass(banjidizhi);
break;
case 7:
hebingbanji(banjidizhi);
break;
case 8:
addteacher(banjidizhi[i]);
default:
printf("\n按键错误!请重新选择!\n");
daoyuandenglu(banjidizhi);
}/*结束switch*/
}
//老师登录界面。
void laoshidenglu(clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* 亲爱的老师 *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.学生成绩写入 ****************************\n");
printf("************************* 2.查询学生成绩 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作:");
scanf_s("%d", &choice);
if (choice != 0)
{
printf("\n请输入你所要操作的班级。");
char classtemp[20];
scanf_s("%s", &classtemp, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
break;
}
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(banjidizhi);
}
break;
case 1:
addgrade(banjidizhi[i]);
break;
case 2:
lookgrade(banjidizhi[i]);
break;
default:
printf("\n按键错误!请重新选择!\n");
laoshidenglu(banjidizhi);
}/*结束switch*/
}
//学生登录界面。
void xueshengdenglu(clas banjidizhi[20])
{
int i, choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* Hello,学生! *\n");
printf("* welcome to &学生成绩文件管理& !!!!!! *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************\n");
printf("************************* 请输入所需操作 ****************************\n");/*选择功能菜单*/
printf("************************* 1.查询信息 ****************************\n");
printf("************************* 2.查询科任老师信息 ****************************\n");
printf("************************* 0.退出系统 ****************************\n");
printf("请输入您所需要的操作: ");
scanf_s("%d", &choice);
if (choice != 0)
{
printf("\n请输入你所要操作的班级。");
char classtemp[20];
scanf_s("%s", classtemp, 20);
for (i = 0; i < 20; i++)
{
if (strcmp(banjidizhi[i].classname, classtemp) == 0)
{
break;
}
}
}
switch (choice) /*多重选择实现功能不同的功能*/
{
case 0:
while (1) {
jiemian(banjidizhi);
}
break;
case 1:
slookgra(banjidizhi[i]);
break;
case 2:
slooktea(banjidizhi[i]);
break;
default:
printf("\n按键错误!请重新选择!\n");
xueshengdenglu(banjidizhi);
}/*结束switch*/
}
int main()
{
L = new uslnode;
L->next = NULL;
clas banjidizhi[20];
for (int i = 0; i < 20; i++)
{
initclass(banjidizhi[i]);
}
while (1)
{
jiemian(banjidizhi);
}
system("pause");
return 0;
}