这是一篇又臭又长的文章,有兴趣的可以看下去。。。
功能介绍:
1.用C语言实现一个包含素质类项目对应成果管理的成绩管理系统,能够录入学校本科生的成绩和素质类项目对应成果,并进行管理和维护,具体包括:
(1)管理系统可管理学校本科生的信息和素质类项目成果。
(2)学生信息包括姓名,学号,学院,年级,各科成绩,素质类成果。
(3)学生可以查询学校开设的学科,包括学科名称,课时,学分,类型(选修或必修)。
(4)系统会为学生记录并保存相关成绩,并对每一学期成绩进行排名和GPA的计算,为学校学生推免和奖学金评比提供依据。
(5)系统可分为教师端和学生端,学生端可以查询信息,教师端不仅可以查询信息,也可以修改信息。
具体的功能如下
- 增加:录入学生信息,包括学号,姓名,学院,各科成绩,素质类项目成果,并且支持一次性录入多个学生成绩记录。
- 增加:录入科目学时和学分和素质类项目成果的学分增益。
- 修改:能够随时修改学生信息,若经审核发现学生成绩录入错误,可以根据学生学号或者姓名查找要修改的学生记录,找到记录后,则可对该记录的各个字段进行修改。
- 修改:能够随学校安排变更科目学时和学分和素质类项目成果的学分增益。
- 删除:可以根据学生学号或者姓名查找要删除的学生记录,找到该记录后可以删除。
- 查找:按照学号可以查找学生记录,并打印学生信息。
- 查找:按照姓名可以查找学生记录,并打印学生信息。
8.统计:统计某学科挂科人数和优秀人数,并打印。
9.存储:将当前系统中所有信息保存进文件里。
10.排名:对某学院某一学期学生成绩进行排名并打印。
11.排名:对某一学院毕业生成绩进行排名,并打印推免名单。
(代码功能与上面介绍时有所不同)
源码:
//头文件 all.h
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<cstdio>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#include<windows.h>
#include<stdbool.h>
#include<string>
#include<iostream>
//#include"students.h"
//学科信息
typedef struct subject {
char name[100];
double credit;
int class_hour;
bool st;
}subjects;
//st 为true时为必修,为false时为选修;
//素质类成果
typedef struct quality_outcome {
char name[200];
char kind[100];
double add_credit;
}quality_outcomes;
//专业信息
typedef struct major {
char name[100];
}majors;
//学生信息
typedef struct Student {
char name[30];
int student_number;
char major_name[100];
int college;
int grade;
//待完善
//年度
double result[35];//成绩
double result_2[35];//素质类成果
double avg_credit;//平均绩点
int Rank;//排名
//四年
double all_avg_credit;
int all_Rank;
struct Student* pNext;
}Student;
typedef struct user {
char ac[30];//账号
char pw[30];//密码
}users;
typedef struct message {
char account[15];
char password[15];
}person;
typedef struct k {
char account[15];
char password[15];
}people[10];
//extern int renshu;
extern int th;
extern int len ;
extern int tmp_4[15];//各专业推免人数
extern users tmp_0[100];//用tmp_0作为用户信息数组
extern subjects tmp_1[35];//用tmp_1作为学科数组
extern quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
extern majors tmp_3[15];//用作为major专业数组
extern int tuimian[15];//各专业推免人数
extern bool st_4[15];//专业存在的标记数组
extern bool st_3[35];//学科存在的标记数组
extern int st_1[15][35];//专业学科信息的标记数组
extern bool st_2[35];//素质类成果存在的标记数组
void maneMenu();//管理端菜单
void maneKeyDown();//管理端菜单功能
void keyDown();//教师菜单功能
void systemMenu();//教师菜单
void stuKeyDown();//学生菜单功能
void stuMenu();//学生菜单
void Menu();// 系统菜单
void Key();// 系统菜单功能
void Hello();//登录界面
void login();//登录函数
void registeruser();//注册函数
void Print(char c, int n, int flag);
void tuimian_modify();//推免人数的修改
void initialize();//信息的初始化
//void initialize_majors();//初始化专业信息
//void initialize_subjects();//初始化学科信息
//void initialize_quality_outcomes();//初始化素质类成果信息
//void mark_subjects();//标记科目
void showMainMenu();//打印主界面,显示功能选项
Student* Create();//创建学生记录,返回学生结构体类型的指针
void all_student(Student* pHead);//待填充文件参数
void Add_students(Student* pHead);//向已有的数据表中添加学生信息
void subject();//管理端学科信息
void quality_outcome();//管理端素质化成果信息
void major();//管理端专业信息
//void Show(Student* pHead);//显示数据表中的所有信息
void stuSearch();//学生端成绩查询(通过文件)
void teaSearch(Student* pHead);//教师端成绩查询
void Modify_students(Student* pHead);//在数据表中搜索信息,找到后修改信息,没有找到则给出提示
//void Modify_subjects();//修改学科信息,没有找到给出提示
void Modify_quality_outcomes();//修改素质类成果信息,没有找到给出提示信息
Student* Delete(Student* pHead);//删除一个学生记录,先查找,若无则给出提示参数:一个已有的链表指针
void stuSort(); //学生端年度学分排名
void teaSort(Student* pHead);//教师端年度学分排名
//void stusort(Student* pHead);//学生端推免排名
//void teaAll_sort(Student* pHead);//教师端推免排名
void Statistics(Student* pHead);//统计数据表中的信息,分析各科成绩情况
Student* Read();//从文件读取信息
void Save();//保存数据表到本地,可以二进制保存或文本格式保存
int CheakNum(char* pcNotice);//检查学号输入是否正确
float CheakScore(char* pcNotice);//检查成绩输入是否正确
void ShowHead(int iType);//打印一段表头
void ShowSortMenu();//显示排序功能选项
void modeset(int w, int h);//初始化窗口大小
double jidian(double a);//绩点换算函数
void SwapStu(Student* Stu_1, Student* Stu_2);//交换学生信息
int huanhang(int r);int huanhang1(int r);
void printf2();
//main.c
#include"all.h"
int th;
int len;
int tmp_4[15];//各专业推免人数
users tmp_0[100];//用tmp_0作为用户信息数组
subjects tmp_1[35];//用tmp_1作为学科数组
quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
majors tmp_3[15];//用作为major专业数组
int tuimian[15];//各专业推免人数
bool st_4[15];//专业存在的标记数组
bool st_3[35];//学科存在的标记数组
int st_1[15][35];//专业学科信息的标记数组
bool st_2[35];//素质类成果存在的标记数组
int main()
{
//system("color 5");
//list = createList();
//readInfoFromFile("student.txt", list);
while (1)
{
//printf("%d", st_1[1][29]);
const char* dbFilePath = "数据库";
const char* dbFilePath1 = "231";
const char* dbFilePath2 = "23_11";
//remove(dbFilePath);//删除数据库文件代码
//remove(dbFilePath1);//删除文件
//remove(dbFilePath2);
Hello();
system("pause");
system("cls");
}
return 0;
}
#include"all.h"
int huanhang(int r) {
if (r == 3) { printf("\n"); r = 0; }
if (r != 3) r++;
return r;
}
int huanhang1(int r) {
if (r == 2) { printf("\n"); r = 0; }
if (r != 2) r++;
return r;
}
void all_student(Student* pHead) {
extern subjects tmp_1[35];
extern int st_1[15][35];
subjects X[10];
printf("---------------【查找专业的全部学生的信息】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.打印全部学生信息\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tips = 0;
while (1) {
scanf("%d", &tips);
if (tips < 0 || tips>1) {
printf("请您重新输入!\n");
}
switch (tips) {
case 0:
printf("\n返回菜单\n");
system("cls");
return;
system("pause");
break;
case 1:
printf2();
int p = 1;for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); p = huanhang(p); }
}printf2();
/*printf("---请输入你要查找专业所对应的数字---\n");
printf("计算机科学与技术输入0 网络安全输入1\n物联网输入2 汉语言文学输入3\n");
printf("物理输入4 化学输入5\n数学输入6 法学输入7\n自动化输入8 经济学输入9 \n");*/
int a, b = 0;
scanf("%d", &a);
int cnt = 0;
for (int i = 0;i <= 30;i++) {
if (st_1[a][i]==1) {
X[cnt++] = tmp_1[i];
}
}
printf("学号\t姓名\t年级\t%s\t%s\t%s\t%s\t%s\t\n", X[0].name, X[1].name, X[2].name, X[3].name, X[4].name);
Student* pcu = pHead;
while (pcu != NULL)
{
if (pcu->college == a) {
printf("%d\t%s\t%d\t", pcu->student_number,pcu->name, pcu->grade);
for (int i = 0; i < 31; i++) {
if (st_1[a][i] == 1) {
printf("%.1lf\t\t", pcu->result[i]);
}
}printf("\n");
}pcu = pcu->pNext;
}
}break;
}
}
#include"all.h"
double jidian(double a) {
double b = 0;
if (a > 90 || 90.0 == a) { b = 4.0; }
else if ((87 < a) || 87 == a) { b = 3.7; }
else if ((84 < a) || 84 == a) { b = 3.3; }
else if ((80 < a) || 80 == a) { b = 3.0; }
else if ((77 < a) || 77 == a) { b = 2.7; }
else if ((74 < a) || 74 == a) { b = 2.3; }
else if ((70 < a) || 70 == a) { b = 2.0; }
else if ((67 < a) || 67 == a) { b = 1.7; }
else if ((64 < a) || 64 == a) { b = 1.3; }
else if ((60 < a) || 60 == a) { b = 1.0; }
else if (a < 60) { b = 0.0; }
return b;
}//根据成绩算绩点
Student* Create() {
printf("---------------【输入学生信息】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.输入信息\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tips = 0;
int m1 = 0;
Student X[100] = { 0 };//结构体数组,保存了前一年的all_avg_credit和avg_credit
int cnt = 0;
double t;
int renshu, x;
extern subjects tmp_1[35];
extern quality_outcomes tmp_2[35];
extern int st_1[15][35];
Student* p, * tail, * pHead;
p = (Student*)malloc(sizeof(Student));
pHead = p; tail = p;
scanf("%d", &tips);
if (tips < 0 || tips>1) {
printf("请您重新输入!\n");
}
while (1) {
switch (tips) {
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
return pHead;;
break;
case 1:
printf("\n请输入年级:");
int g;
scanf("%d", &g);
char filename[10];
//filename[0] = year[0], filename[1] = year[1], filename[2] = g;
if (g >= 2) {
printf("\n请输入前去年学生信息的文件名:");
scanf("%s", filename);
}
FILE* file = fopen(filename, "r");
if (file != NULL) {
while (fscanf(file, "%lf %lf %d", &X[cnt].all_avg_credit, &X[cnt].avg_credit, &X[cnt].student_number)==3 ) {
cnt++;
}
}
//pHead->pNext = NULL;
printf("\n请输入学生人数:");
scanf("%d", &renshu);
for (int i = 0; i < renshu; i++) {
system("cls");
printf("请输入第%d学生的信息\n",i+1);
printf("输入姓名:"); scanf("%s", &p->name);
printf("输入学号:"); scanf("%d", &p->student_number);
/*printf("输入学院数字:\n计算机科学与技术输入0 网络安全输入1\n物联网输入2 汉语言文学输入3\n");
printf("物理输入4 化学输入5\n数学输入6 法学输入7\n自动化输入8 经济学输入9 \n");*/
printf2(); printf("请输入学院数字\n");int canshu1 = 1;for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu1 = huanhang(canshu1); }
}printf2();
scanf("%d", &p->college);
printf("输入学院名字:");
scanf("%s", &p->major_name);
p->grade = g;
//printf("%d\n", p->grade);
x = p->college; double z = 0, m = 0;
int pq1 = 1;
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
}
printf2();
/*printf("0微积分AI 1线性代数A 2程序设计基础\n");
printf("3计算机导论 4思想道德与法治 5微积分AII\n");
printf("6离散数学 7微积分AIII 8传感器技术\n");
printf("9大学英语 10面向对象程序设计 11体育\n");
printf("12中国近现代史 13形势与政策 14数据结构\n");
printf("15概率论与数理统计 16计算机网络 17操作系统\n");
printf("18计算机组成原理 19计算机系统架构 20无线传感器网络\n");
printf("21信息安全数学基础 22应用密码学 23微机系统\n");
printf("24马克思主义基本原理 25组合数学 26深度学习\n");
printf("27大学生职业规划 28计算思维与计算科学 29四史\n");*/
//printf("\n%d", st_1[1][1]);
for (int i = 0;i < 35;i++) {
p->result_2[i] = 0;
}
for (int i = 0; i < 35; i++) {
if (st_1[x][i] == 1) {
printf("请输入%s的成绩\n", tmp_1[i].name);
scanf("%lf", &p->result[i]);//输入被标记的即这个专业有的学科
if (tmp_1[i].st == true) {
t = p->result[i];
t = jidian(t);
z = z + tmp_1[i].credit;//总学分
m = t * tmp_1[i].credit + m;//各科学分与时长乘积
}
}
}
p->avg_credit = m / z;
if (p->grade >= 2) {
for (int i = 0;i<renshu;i++) {
if(X[i].student_number == p->student_number)
p->all_avg_credit = p->avg_credit + X[i].all_avg_credit;
}
}
else {
p->all_avg_credit = p->avg_credit;
}
if (p->grade == 4) {
printf2();
printf("请增加奖项\n");
int pu1 = 1;
for (int i = 0; i < 35; i++) {
if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu1 = huanhang1(pu1); }
} printf2();
/*printf("0国家级优秀结题项目负责人 1国家级优秀结题项目第二名\n");
printf("2业界公认学科综合顶级期刊 3CCF_A期刊\n");
printf("4CCF_A会议长文 5CCF_B会议最佳论文/最佳学生论文\n");
printf("6CCF_B期刊论文 7中科院期刊分区一区论文 \n");
printf("8CCF_C会议最佳论文/最佳学生论文 9CCF_C期刊论文\n");
printf("10CCF_B会议论文 11中科院期刊分区二区论文\n");
printf("12计算机/软件学报发表的学术论文 13影响因子非0的SCI检索期刊论文\n");
printf("14CCF_C会议长文 15信息科学发表的学术论文\n");
printf("16EI检索期刊 17A类竞赛国家级一等奖\n");
printf("18A类竞赛国家级二等奖 19B类国家竞赛一等奖\n");
printf("20A类竞赛国家级三等奖 21B类竞赛国家级二等奖\n");
printf("22C类竞赛国家级一等奖 23B类竞赛国家级三等奖\n");
printf("24C类竞赛国家级二等奖 25C类竞赛国家级三等奖\n");*/
// printf("请输入你得到的奖项,输入完毕请输入30以结束");
int shumu;
int O;
printf("请输入你得到的奖项数目:\n");
scanf("%d", &shumu);
printf("请输入你所得到的奖项对应的数字:");
for (int m1 = 0;m1 < 35;m1++) {
p->result_2[m1] = 0;
}
for (int k = 0; k < shumu; k++) {
scanf("%d", &O);
p->result_2[O] = tmp_2[O].add_credit;//计算总得到的学分
}
double mr = 0; int w = 0;
for (w = 0; w < 35; w++) {
mr = mr + p->result_2[w];
}
p->all_avg_credit = p->all_avg_credit / 4 + mr;
}
if (i == renshu - 1) {
continue;
}
p = (Student*)malloc(sizeof(Student));
tail->pNext = p;
tail = p;
}
printf("\n信息输入完毕\n");
tail->pNext = NULL;
return pHead;
}
}
}
#include"all.h"
Student* Delete(Student* pHead)
{
printf("---------------【学生记录删除】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.删除学生记录\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tip = 0;
Student* ptemp = pHead;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>1) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
return ptemp;
system("pause");
break;
case 1:
printf("请输入要删除的学生的学号:");
int inumber;
scanf("%d", &inumber);
getchar();
Student* pos = NULL;
if (ptemp == NULL) {
return ptemp;
}
else {
if (pHead->student_number == inumber) {
return pHead->pNext;
}
while (ptemp->pNext != NULL)
{
if (inumber == ptemp->pNext->student_number)
{
pos = ptemp->pNext;
ptemp->pNext = pos->pNext;
free(pos);
pos = NULL;
}
if (ptemp->pNext != NULL) {
ptemp = ptemp->pNext;
}
else {
break;
}
}
if (pHead) {
return pHead;
}
else {
return NULL;
}
}
break;
}
}
}
#include"all.h"
void Hello()
{
int se;
printf("---------------【学生管理系统】---------------\n\n");
printf("-----------------【登录界面】-----------------\n\n");
printf("\t\t0.-退出系统-\n");
printf("\t\t1.-登录账号-\n");
printf("\t\t2.-注册账号-\n\n");
printf("-----------------【欢迎使用】-----------------\n\n");
printf("请输入(0-2):");
while (1) {
scanf("%d", &se);
if (se < 0 || se>2) {
printf("请您重新输入!\n");
}
switch (se)
{
case 1:
login();//登录
printf("---------------【学生管理系统】---------------\n\n");
printf("-----------------【登录界面】-----------------\n\n");
printf("\t\t0.-退出系统-\n");
printf("\t\t1.-登录账号-\n");
printf("\t\t2.-注册账号-\n\n");
printf("-----------------【欢迎使用】-----------------\n\n");
printf("请输入(0-2):");
break;
case 2:
registeruser();//注册
printf("---------------【学生管理系统】---------------\n\n");
printf("-----------------【登录界面】-----------------\n\n");
printf("\t\t0.-退出系统-\n");
printf("\t\t1.-登录账号-\n");
printf("\t\t2.-注册账号-\n\n");
printf("-----------------【欢迎使用】-----------------\n\n");
printf("请输入(0-2):");
break;
case 0:
printf("\t\t【退出系统】\n");
exit(0);
system("pause");
break;
default:
printf("输入错误!请重新输入:\n");
break;
}
}
}
#include"all.h"
void initialize()
{
printf("---------------【基础信息的初始化】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.专业信息的初始化\n");
printf("\t\t2.学科信息的初始化\n");
printf("\t\t3.素质类成果信息的初始化\n");
printf("\t\t4.各专业学科的初始化\n");
printf("\t\t5.各专业推免人数的初始化\n");
printf("----------------------------------------------\n");
printf("请输入(0-5):");
int tip = 0;
extern users tmp_0[100];//用tmp_0作为用户信息数组
extern subjects tmp_1[35];//用tmp_1作为学科数组
extern quality_outcomes tmp_2[35];//用tmp_2作为素质类成果数组
extern majors tmp_3[15];//用作为major专业数组
extern bool st_4[15];//专业存在的标记数组
extern bool st_3[35];//学科存在的标记数组
extern int st_1[15][35];//专业学科信息的标记数组
extern bool st_2[35];//素质类成果存在的标记数组
extern int tuimian[15];//各专业推免人数
int canshu3 = 1; int pq2 = 1;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>5) {
printf("请您重新输入\n");
}
int w = 40;
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
maneMenu();
maneKeyDown();
break;
case 1:
strcpy(tmp_3[0].name, "计算机科学与技术");
strcpy(tmp_3[1].name, "网络安全");
strcpy(tmp_3[2].name, "物联网");
strcpy(tmp_3[3].name, "汉语言文学");
strcpy(tmp_3[4].name, "物理");
strcpy(tmp_3[5].name, "化学");
strcpy(tmp_3[6].name, "数学");
strcpy(tmp_3[7].name, "法学");
strcpy(tmp_3[8].name, "自动化");
strcpy(tmp_3[9].name, "经济学");
// printf("%s\n", tmp_3[9].name);//
for (int i = 0;i < 10;i++) {
st_4[i] = 1;
}
printf("专业信息初始化完成\n");
system("pause");
system("cls");
initialize();
// system("pause");
break;
case 2:
strcpy(tmp_1[0].name, "微积分AI");
tmp_1[0].class_hour = 72;
tmp_1[0].credit = 3.5;
tmp_1[0].st = true;
strcpy(tmp_1[1].name, "线性代数A");
tmp_1[1].class_hour = 56;
tmp_1[1].credit = 2.5;
tmp_1[1].st = true;
strcpy(tmp_1[2].name, "程序设计基础");
tmp_1[2].class_hour = 72;
tmp_1[2].credit = 4;
tmp_1[2].st = true;
strcpy(tmp_1[3].name, "计算机导论");
tmp_1[3].class_hour = 16;
tmp_1[3].credit = 0.5;
tmp_1[3].st = false;
strcpy(tmp_1[4].name, "思想道德与法治");
tmp_1[4].class_hour = 40;
tmp_1[4].credit = 2.5;
tmp_1[4].st = true;
strcpy(tmp_1[5].name, "微积分AII");
tmp_1[5].class_hour = 72;
tmp_1[5].credit = 3.0;
tmp_1[5].st = true;
strcpy(tmp_1[6].name, "离散数学");
tmp_1[6].class_hour = 56;
tmp_1[6].credit = 3.5;
tmp_1[6].st = true;
strcpy(tmp_1[7].name, "微积分AIII");
tmp_1[7].class_hour = 64;
tmp_1[7].credit = 3.5;
tmp_1[7].st = true;
strcpy(tmp_1[8].name, "传感器技术");
tmp_1[8].class_hour = 32;
tmp_1[8].credit = 2.0;
tmp_1[8].st = true;
strcpy(tmp_1[9].name, "大学英语");
tmp_1[9].class_hour = 32;
tmp_1[9].credit = 2;
tmp_1[9].st = true;
strcpy(tmp_1[10].name, "面向对象程序设计");
tmp_1[10].class_hour = 64;
tmp_1[10].credit = 3.5;
tmp_1[10].st = true;
strcpy(tmp_1[11].name, "体育");
tmp_1[11].class_hour = 32;
tmp_1[11].credit = 0.5;
tmp_1[11].st = true;
strcpy(tmp_1[12].name, "中国近现代史");
tmp_1[12].class_hour = 40;
tmp_1[12].credit = 2.5;
tmp_1[12].st = true;
strcpy(tmp_1[13].name, "形势与政策");
tmp_1[13].class_hour = 16;
tmp_1[13].credit = 0.5;
tmp_1[13].st = true;
strcpy(tmp_1[14].name, "数据结构");
tmp_1[14].class_hour = 88;
tmp_1[14].credit = 5.0;
tmp_1[14].st = true;
strcpy(tmp_1[15].name, "概率论与数理统计");
tmp_1[15].class_hour = 70;
tmp_1[15].credit = 3.0;
tmp_1[15].st = true;
strcpy(tmp_1[16].name, "计算机网络");
tmp_1[16].class_hour = 48;
tmp_1[16].credit = 3.0;
tmp_1[16].st = true;
strcpy(tmp_1[17].name, "操作系统");
tmp_1[17].class_hour = 72;
tmp_1[17].credit = 4.0;
tmp_1[17].st = true;
strcpy(tmp_1[18].name, "计算机组成原理");
tmp_1[18].class_hour = 48;
tmp_1[18].credit = 3.0;
tmp_1[18].st = true;
strcpy(tmp_1[19].name, "计算机系统架构");
tmp_1[19].class_hour = 48;
tmp_1[19].credit = 3.0;
tmp_1[19].st = true;
strcpy(tmp_1[20].name, "无线传感器网络");
tmp_1[20].class_hour = 56;
tmp_1[20].credit = 3.0;
tmp_1[20].st = true;
strcpy(tmp_1[21].name, "信息安全数学基础");
tmp_1[21].class_hour = 56;
tmp_1[21].credit = 3.5;
tmp_1[21].st = true;
strcpy(tmp_1[22].name, "应用密码学");
tmp_1[22].class_hour = 72;
tmp_1[22].credit = 4.0;
tmp_1[22].st = true;
strcpy(tmp_1[23].name, "微机系统");
tmp_1[23].class_hour = 48;
tmp_1[23].credit = 3.5;
tmp_1[23].st = true;
strcpy(tmp_1[24].name, "马克思主义基本原理");
tmp_1[24].class_hour = 40;
tmp_1[24].credit = 2.5;
tmp_1[24].st = true;
strcpy(tmp_1[25].name, "组合数学");
tmp_1[25].class_hour = 32;
tmp_1[25].credit = 2.0;
tmp_1[25].st = false;
strcpy(tmp_1[26].name, "深度学习");
tmp_1[26].class_hour = 32;
tmp_1[26].credit = 2.0;
tmp_1[26].st = false;
strcpy(tmp_1[27].name, "大学生职业规划");
tmp_1[27].class_hour = 32;
tmp_1[27].credit = 2.0;
tmp_1[27].st = false;
strcpy(tmp_1[28].name, "计算思维与计算科学");
tmp_1[28].class_hour = 48;
tmp_1[28].credit = 3.0;
tmp_1[28].st = false;
strcpy(tmp_1[29].name, "四史");
tmp_1[29].class_hour = 32;
tmp_1[29].credit = 2.0;
tmp_1[29].st = false;
//printf("%s", tmp_1[29].name);//
for (int i = 0;i < 30;i++) {
st_3[i] = 1;
}
printf("学科信息初始化完成\n");
system("pause");
system("cls");
initialize();
break;
case 3:
strcpy(tmp_2[0].name, "国家级优秀结题项目负责人");
strcpy(tmp_2[0].kind, "科研成果");
tmp_2[0].add_credit = 0.1;
strcpy(tmp_2[1].name, "国家级优秀结题项目第二名");
strcpy(tmp_2[1].kind, "科研成果");
tmp_2[1].add_credit = 0.05;
strcpy(tmp_2[2].name, "业界公认学科综合顶级期刊");
strcpy(tmp_2[2].kind, "科研成果");
tmp_2[2].add_credit = 0.4;
strcpy(tmp_2[3].name, "CCF_A期刊");
strcpy(tmp_2[3].kind, "科研成果");
tmp_2[3].add_credit = 0.2;
strcpy(tmp_2[4].name, "CCF_A会议长文");
strcpy(tmp_2[4].kind, "科研成果");
tmp_2[4].add_credit = 0.2;
strcpy(tmp_2[5].name, "CCF_B会议最佳论文/最佳学生论文");
strcpy(tmp_2[5].kind, "科研成果");
tmp_2[5].add_credit = 0.2;
strcpy(tmp_2[6].name, "CCF_B期刊论文");
strcpy(tmp_2[6].kind, "科研成果");
tmp_2[6].add_credit = 0.1;
strcpy(tmp_2[7].name, "中科院期刊分区一区论文");
strcpy(tmp_2[7].kind, "科研成果");
tmp_2[7].add_credit = 0.1;
strcpy(tmp_2[8].name, "CCF_C会议最佳论文/最佳学生论文");
strcpy(tmp_2[8].kind, "科研成果");
tmp_2[8].add_credit = 0.1;
strcpy(tmp_2[9].name, "CCF_C期刊论文");
strcpy(tmp_2[9].kind, "科研成果");
tmp_2[9].add_credit = 0.05;
strcpy(tmp_2[10].name, "CCF_B会议论文");
strcpy(tmp_2[10].kind, "科研成果");
tmp_2[10].add_credit = 0.05;
strcpy(tmp_2[11].name, "中科院期刊分区二区论文");
strcpy(tmp_2[11].kind, "科研成果");
tmp_2[11].add_credit = 0.05;
strcpy(tmp_2[12].name, "计算机学报/软件学报发表的学术论文");
strcpy(tmp_2[12].kind, "科研成果");
tmp_2[12].add_credit = 0.05;
strcpy(tmp_2[13].name, "影响因子非零的SCI检索期刊论文");
strcpy(tmp_2[13].kind, "科研成果");
tmp_2[13].add_credit = 0.02;
strcpy(tmp_2[14].name, "CCF_C会议长文");
strcpy(tmp_2[14].kind, "科研成果");
tmp_2[14].add_credit = 0.02;
strcpy(tmp_2[15].name, "中国科学:中国信息科学发表的学术论文");
strcpy(tmp_2[15].kind, "科研成果");
tmp_2[15].add_credit = 0.02;
strcpy(tmp_2[16].name, "EI检索期刊");
strcpy(tmp_2[16].kind, "科研成果");
tmp_2[16].add_credit = 0.01;
strcpy(tmp_2[17].name, "A类竞赛国家级一等奖");
strcpy(tmp_2[17].kind, "竞赛获奖");
tmp_2[17].add_credit = 0.4;
strcpy(tmp_2[18].name, "A类竞赛国家级二等奖");
strcpy(tmp_2[18].kind, "竞赛获奖");
tmp_2[18].add_credit = 0.2;
strcpy(tmp_2[19].name, "B类竞赛国家级一等奖");
strcpy(tmp_2[19].kind, "竞赛获奖");
tmp_2[19].add_credit = 0.2;
strcpy(tmp_2[20].name, "A类竞赛国家级三等奖");
strcpy(tmp_2[20].kind, "竞赛获奖");
tmp_2[20].add_credit = 0.1;
strcpy(tmp_2[21].name, "B类竞赛国家级二等奖");
strcpy(tmp_2[21].kind, "竞赛获奖");
tmp_2[21].add_credit = 0.1;
strcpy(tmp_2[22].name, "C类竞赛国家级一等奖");
strcpy(tmp_2[22].kind, "竞赛获奖");
tmp_2[22].add_credit = 0.1;
strcpy(tmp_2[23].name, "B类竞赛国家级三等奖");
strcpy(tmp_2[23].kind, "竞赛获奖");
tmp_2[23].add_credit = 0.05;
strcpy(tmp_2[24].name, "C类竞赛国家级二等奖");
strcpy(tmp_2[24].kind, "竞赛获奖");
tmp_2[24].add_credit = 0.05;
strcpy(tmp_2[25].name, "C类竞赛国家级三等奖");
strcpy(tmp_2[25].kind, "竞赛获奖");
tmp_2[25].add_credit = 0.02;
//printf("%s\n", tmp_2[25].name);//
for (int i = 0;i < 26;i++) {
st_2[i] = 1;
}
printf("素质类成果信息初始化完成\n");
system("pause");
system("cls");
initialize();
break;
case 4:
//新增学科的初始化问题
//新增学科或删除学科的提示
// printf("\n请选择专业(0代表计算机科学与技术,1代表网络安全,2代表物联网,3代表汉语言文学,4代表物理,5代表化学,6代表数学,7代表法学,8代表自动化,9代表经济学)\n");
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3= huanhang(canshu3); }
}
printf("\n请选择专业\n");
printf2();
/*for (int i = 0;i < 15;i++) {
if (st_4[i]) {
printf("%d%s\t",i, tmp_3[i].name);
}if ((i + 1) % 3 == 0) {
printf("\n");
}
}*/
int a;
scanf("%d", &a);
// printf("\n请选择年级\n");
//int b;
// scanf("%d", &b);
//printf("微积分AI0\n线性代数A1\n程序设计基础2\n计算机导论3\n思想道德与法治4\n微积分AII5\n离散数学6\n微积分AIII7\n传感器技术8\n大学英语9\n面向对象程序设计10\n");
//printf("体育11\n 中国近现代史12\n形势与政策13\n数据结构14\n概率论与数理统计15\n计算机网络16\n操作系统17\n计算机组成原理18\n计算机系统架构19\n无线传感器网络20\n");
//printf("信息安全数学基础21\n应用密码学22\n 微机系统23\n马克思主义基本原理24\n 组合数学25\n深度学习26\n大学生职业规划27\n计算思维与计算科学28\n四史29");
/*for (int i = 0;i < 35;i++) {
if (st_3[i]) {
printf("%d %s\t\t",i, tmp_1[i].name);
}if ((i + 1) % 3 == 0) {
printf("\n");
}
}*/
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq2= huanhang(pq2); }
}printf2();
printf("\n输入完毕后请输入-1退出\n");
printf("请输入你想输入的学科代号:\n");
while (w != -1)
{
scanf("%d", &w);
if (w >= 0 && w < 35) {
st_1[a][w] = 1;
}
}
printf("\n各专业年级科目信息初始化完成\n");
system("pause");
system("cls");
initialize();
break;
case 5:
/* for (int i = 0;i < 15;i++) {
if (st_4[i]) {
printf("%d %s\t\t", i, tmp_3[i].name);
}if ((i + 1) % 3 == 0) {
printf("\n");
}
}*/
int canshu2 = 1;
//printf("\n请选择专业(0代表计算机科学与技术,1代表网络安全,2代表物联网,3代表汉语言文学,4代表物理,5代表化学,6代表数学,7代表法学,8代表自动化,9代表经济学)\n");
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu2 = huanhang(canshu2); }
}
printf2();
printf("\n请选择专业编号:");
int a1;
scanf("%d", &a1);
printf("\n请输入您要设定的推免人数\n");
int b;
scanf("%d", &b);
tuimian[a1] = b;
system("pause");
system("cls");
initialize();
break;
}
}
}
#include"all.h"
void Menu()
{
printf("---------------【学生管理系统】---------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.教师端\n");
printf("\t\t2.学生端\n");
printf("\t\t3.管理端\n");//管理端密钥设置待完善。。。。。。
printf("\t\t4.退出登录\n");
printf("----------------------------------------------\n");
printf("请选择身份(请输入0-4):");
}
void Key()
{
char k[6] = { 0 };
int userKey;
int flag = 0;
//struct student tempData;
scanf("%d", &userKey);
if (userKey < 0 || userKey>4) {
printf("请您重新输入!\n");
}
switch (userKey)
{
case 0:
printf("\t\t【退出系统】\n");
system("pause");
exit(0);
break;
case 1:
system("cls");
systemMenu();
keyDown();
system("pause");
break;
case 2:
system("cls");
stuMenu();
stuKeyDown();
system("pause");
break;
case 3:
printf("\n请输入管理端密钥:\n");
for (int j = 0; j < 6; j++)
{
k[j] = _getch();
printf("*");
}
for (int i = 0;i < 6;i++) {
if (k[i] != '6') {
flag = 1;
break;
}
}
if (flag == 1) {
printf("\n密钥输入错误,您无权限进入管理端!\n");
printf("\n账号已退出\n");
system("pause");
break;
}
system("cls");
maneMenu();
maneKeyDown();
system("pause");
case 4:
while (1)
{
system("cls");
Hello();
system("pause");
}
break;
default:
printf("输入错误!请重新输入:");
break;
}
}
#include"all.h"
void login()
{
int len = sizeof(message);
int th = sizeof(k);
k people[15];
message person;
printf("\t\t【登录账号】 ");
FILE * rp;
if ((rp = fopen("数据库", "r+")) == NULL)
exit(0);
fseek(rp, 0, SEEK_END);
int size = ftell(rp);
rewind(rp);
if (size != 0)
{
while (1)
{
int i = 0;
printf("\n请输入账号:");
scanf("%s", &person.account);
printf("请输入密码:");
for (int j = 0; j < 6; j++)
{
person.password[j] = _getch();
printf("*");
}
person.password[6] = '\0'; // 添加字符串结束符
while (fscanf(rp,"%s %s",people[i].account,people[i].password)) // 读取信息
{
//while fscanf存疑为什么无法正常进行??????
if (strcmp(people[i].account, person.account) == 0 && strcmp(people[i].password, person.password) == 0) // 密码的判断
{
printf("登录成功\n");
fclose(rp);
system("pause");
system("cls");
while (1)
{
Menu();
Key();
system("pause");
system("cls");
}
break; // 登录成功,跳出循环
}
i++;
}
if (i == size / th) // 如果遍历完所有数据仍未找到匹配项,则登录失败
{
printf("登录失败!");
rewind(rp);
return;// 登录不成功,把文件指针移回文件开头
}
}
}
}
#include"all.h"
void major()
{
printf("---------------【专业增加和删除】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.增加专业\n");
printf("\t\t2.删除专业\n");
printf("----------------------------------------------\n");
printf("请输入(0-2):");
int tip = 0;
extern majors tmp_3[15];
static int n = 9;
extern bool st_4[15];
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>2) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("pause");
system("cls");
maneMenu();
maneKeyDown();
break;
case 1:
n++;
printf("\n请输入您要增加的专业名称\n");
scanf("%s", &tmp_3[n].name);
st_4[n] = 1;
printf("\n%s", tmp_3[10].name);
system("pause");
system("cls");
major();
break;
case 2:
int canshu3 = 1;
int x = 0;
printf("\n请选择您要删除的专业编号\n");
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3 = huanhang(canshu3); }
}
printf2();
scanf("%d", &x);
st_4[x] = 0;
system("pause");
system("cls");
major();
break;
}
}
}
#include"all.h"
void maneMenu()
{
//推免人数的完善。。。。。。。
printf("---------------【学生管理系统】---------------\n\n");
printf("------------------【管理端】------------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.专业信息管理\n");
printf("\t\t2.学科信息管理\n");
printf("\t\t3.素质类成果管理\n");
printf("\t\t4.推免人数管理\n");
printf("\t\t5.初始化信息\n");
printf("\t\t6.返回主菜单\n");
printf("----------------------------------------------\n");
printf("请输入(0-6):");
}
void maneKeyDown()
{
int userKey;
//struct student tempData;
while (1) {
scanf("%d", &userKey);
if (userKey<0 || userKey>1) {
printf("请您重新输入!\n");
}
switch (userKey)
{
case 0:
printf("\t\t【退出系统】\n");
system("pause");
exit(0);
break;
case 1:
system("cls");
major();
maneMenu();
break;
case 2:
system("cls");
subject();
maneMenu();
break;
case 3:
system("cls");
quality_outcome();
maneMenu();
break;
case 4:
system("cls");
tuimian_modify();
maneMenu();
break;
case 5:
system("cls");
initialize();
maneMenu();
break;
case 6:
//printf("\t\t【返回主菜单】\n");
while (1)
{
system("cls");
Menu();
Key();
system("pause");
}
break;
default:
printf("输入错误!请重新输入:");
break;
}
}
}
#include"all.h"
#include <chrono>
void printf2() {
printf("\n-----------------------------------------------------------------------\n");
}
void Modify_students(Student* pHead) {
extern subjects tmp_1[35];
extern quality_outcomes tmp_2[35];
//extern int st_1[10][30];
extern bool st_4[15];//专业存在的标记数组
extern bool st_3[35];//学科存在的标记数组
extern int st_1[15][35];//专业学科信息的标记数组
extern bool st_2[35];//素质类成果存在的标记数组
int iItem, iNum = 0; double z = 0, m = 0;
char _name[20] = { '\0' };
Student* pCu = pHead;//注意只能一次性输入同一学年的学生,保证学号一致性
char filename[10];
char filename1[10];
int pq1 = 0;
printf("---------------【修改学生信息】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.按学号查找并修改\n");
printf("\t\t2.按姓名查找并修改\n");
printf("\t\t3.保存修改内容\n");
printf("----------------------------------------------\n");
printf("请输入(0-3):");
if (pCu == NULL)
{
printf("\n数据表为空,请先创建数据表!\n");
return;
}
scanf("%d", &iItem);
getchar();
while (iItem != 2 && iItem != 1 && iItem != 0 && iItem != 3)
{
printf("输入有误,请重新输入!\n");
scanf("%d", &iItem);
}
switch (iItem)
{
case 0: printf("\n返回菜单\n");
printf("\n返回菜单\n");
system("cls");
system("pause");
return;
break;
case 1:
printf("请输入要查找的学号:");
scanf("%d", &iNum);
getchar();
while (pCu != NULL)
{
double las = 0;
if (pCu->student_number == iNum)
{
/*std::string str = std::to_string(pCu->student_number);
std::string str1 = std::to_string(pCu->grade);
for (int i = 0;i < 2;i++) {
filename[i] = str[i];
}
filename[2] = str1[0];*/
double p = 0;
int x = pCu->college;
int a, b;
printf("\n请输入你要更改的成绩门数\n"); scanf("%d", &a);
/*for (int i = 0;i < 35;i++) {
if (st_3[i]) {
printf("%d %s\t\t", i, tmp_1[i].name);
}if ((i + 1) % 3 == 0) {
printf("\n");
}
}*/
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
}
printf2();
for (int w = 0; w < a; w++) {
printf(" 请输入你要更改的学科门类\n");
scanf("%d", &b);
printf("该学科本来成绩为"); printf("%.1lf\n", pCu->result[b]);
double t = pCu->result[b];
printf("请输入后来成绩为"); scanf("%lf", &pCu->result[b]);
for (int i = 0; i < 35; i++) {
if (st_1[x][i] == 1) {
if (tmp_1[i].st == true) {
las = t;
t = pCu->result[i];
t = jidian(t);
z = z + tmp_1[i].credit;//总学分
m = t * tmp_1[i].credit + m;//各科学分与时长乘积
}
}
}
}
pCu->avg_credit = m / z;
pCu->all_avg_credit = pCu->all_avg_credit + pCu->avg_credit - las;
}
pCu = pCu->pNext;
}
system("cls");
system("pause");
Modify_students(pHead);
break;
case 2:printf("请输入要查找的姓名:");
scanf("%s", _name);
getchar();
while (pCu != NULL)
{
double last = 0.0;
if (strcmp(pCu->name, _name) == 0)
{
/*std::string str = std::to_string(pCu->student_number);
std::string str1 = std::to_string(pCu->grade);
for (int i = 0;i < 2;i++) {
filename[i] = str[i];
}
//filename[2] = '_';
filename[2] = str1[0];*/
double p = 0;
int x = pCu->college;
int a, b;
printf("\n请输入你要更改的成绩数目\n"); scanf("%d", &a);
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
}
printf2();
for (int w = 0; w < a; w++) {
printf(" 请输入你要更改的学科门类\n");
scanf("%d", &b);
printf("该学科本来成绩为"); printf("%.1lf\n", pCu->result[b]);
double t = pCu->result[b]; last = t;
printf("请输入后来成绩为"); scanf("%lf", &pCu->result[b]);
for (int i = 0; i < 35; i++) {
if (st_1[x][i] == 1) {
if (tmp_1[i].st == true) {
t = pCu->result[i];
t = jidian(t);
z = z + tmp_1[i].credit;//总学分
m = t * tmp_1[i].credit + m;//各科学分与时长乘积
}
}
}
}
pCu->avg_credit = m / z;
pCu->all_avg_credit = pCu->all_avg_credit + pCu->avg_credit - last;
}
pCu = pCu->pNext;
}
system("cls");
system("pause");
Modify_students(pHead);
break;
case 3:
printf("请输入文件名(学号前2位和年级):\n");
scanf("%s", filename);
for (int i = 0;i < 10;i++) {
filename1[i] = filename[i];
}
filename1[3] = '0';
for (int i = 4;i < 10;i++) {
filename1[i] = 0;
}
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s", filename);
}
Student* current = pHead;
while (current != NULL) {
fprintf(file, "%s %d %s %d %d", current->name, current->student_number, current->major_name, current->college, current->grade);
for (int i = 0; i < 35; i++) {
if (st_1[current->college][i] == 1) {
fprintf(file, " %.1lf", current->result[i]);
}
}
/* for (int i = 0; i < 35; i++) {
if (current->result_2[i] > 0) {
fprintf(file, " %.1lf", current->result_2[i]);
}
}*/
fprintf(file, " %.1lf %d %.1lf ", current->avg_credit, current->Rank, current->all_avg_credit);
fprintf(file, "\n");
current = current->pNext;
}
fclose(file);
FILE* file1 = fopen(filename1, "w");
if (file1 == NULL) {
printf("无法打开文件 %s", filename1);
}
Student* current1 = pHead;
while (current1 != NULL) {
fprintf(file1, "%.1lf %.1lf %d\n", current1->all_avg_credit, current1->avg_credit, current1->student_number);
current1 = current1->pNext;
}
fclose(file1);
system("cls");
system("pause");
return;
break;
}
}
//Add_quality_outcomes.c
#include"all.h"
void quality_outcome()
{
//注意完善素质类成果信息注释,包括名称对应数字。
printf("---------------【素质类成果增加、修改和删除】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.增加项目\n");
printf("\t\t2.修改项目\n");
printf("\t\t3.删除项目\n");
printf("----------------------------------------------\n");
printf("请输入(0-3):");
int tip;
int pu2 = 1;
int pu1 = 1;
extern quality_outcomes tmp_2[35];
extern bool st_2[35];
static int n = 25;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>3) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
maneMenu();
maneKeyDown();
system("pause");
break;
case 1:
n++;
printf("\n请输入您要增加的素质类成果名称:\n");
scanf("%s", &tmp_2[n].name);
printf("\n请输入您要增加的素质类成果的类别:\n");
scanf("%s", &tmp_2[n].kind);
printf("\n请输入您要增加的素质类成果的学分增益\n");
scanf("%lf", &tmp_2[n].add_credit);
st_2[n] = 1;
printf("\n增加成功\n");
system("cls");
system("pause");
quality_outcome();
break;
case 2:
int x2;
printf2();
for (int i = 0; i < 35; i++) {
if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu2 = huanhang1(pu2); }
}
printf2();
printf("\n请选择您要修改的素质类成果编号:\n");
scanf("%d", &x2);
printf("\n请输入您要修改的素质类成果名称:\n");
scanf("%s", &tmp_2[x2].name);
printf("\n请输入您要修改的素质类成果的类别:\n");
scanf("%s", &tmp_2[x2].kind);
printf("\n请输入您要修改的素质类成果的学分增益\n");
scanf("%lf", &tmp_2[x2].add_credit);
st_2[x2] = 1;
printf("\n修改成功\n");
system("cls");
system("pause");
quality_outcome();
break;
case 3:
//quality_outcomes X;
int x1;
printf2();
for (int i = 0; i < 35; i++) {
if (st_2[i] == 1) { if (i < 10)printf("0");printf("%d%-50s", i, tmp_2[i].name); pu1 = huanhang1(pu1); }
}
printf2();
printf("\n请选择您要删除的素质类成果编号:\n");
scanf("%d", &x1);
st_2[x1] = 0;
printf("\n删除成功\n");
system("cls");
system("pause");
quality_outcome();
break;
}
}
}
// 注册账号功能
#include"all.h"
/*oid registeruser()
{
static int a = 0;
users tmp_0[100];
char ac[30];
char pw[6], pd[6];
int i;
printf("\t\t【注册帐号】\n");
FILE* fp = fopen("账号信息档案.txt", "ab");
printf("请输入用户账号和密码(账号、密码可以为数字,中文字母,英文字母,符号,密码必须6位)\n\n");
printf("请输入账号:");
scanf("%s", ac);
strcpy(tmp_0[a].ac, ac);
printf("请输入密码:");
for (i = 0; i < 6; i++)
{
pw[i] = _getch();
printf("*");
tmp_0[a].pw[i] = pw[i];
if (pw[i] == '\r')
{
printf("注册失败,请重新注册账号\n");
return;
}
}
printf("\n再次确认密码:");
for (i = 0; i < 6; i++)
{
pd[i] = _getch();
printf("*");
if (tmp_0[a].pw[i] != pd[i])
{
printf("\n密码不对,请重新注册账号");
return;
}
}
fprintf(fp, "账号\t密码\n");
fprintf(fp, "%s\t%s\n", tmp_0[a].ac, tmp_0[a].pw);
printf("\n注册成功!!!\n");
fclose(fp);
system("pause");
system("cls");
a++;
}*/
void registeruser()
{
int len = sizeof(message);
int th = sizeof(k);
message person = { 0 };
k people[15];
message X = { 0 };
int flag = 1;
int size = 0;
printf("\t\t【注册帐号】\n");
FILE* fp;//读入指针
if ((fp = fopen("数据库", "a+")) == NULL)
exit(0);
FILE* rp;//读取指针
if ((rp = fopen("数据库", "r+")) == NULL)
exit(0);
while (flag)
{
fseek(rp, 0, SEEK_END);
size = ftell(rp);
rewind(rp);
if (size != 0)
{
while (flag)
{
int i = 0;
printf("请设置账号:");
scanf("%s", &person.account);
printf("请设置密码:");
//scanf("%s", &person.password);
for (int i = 0;i < 6;i++) {
X.password[i] = _getch();
printf("*");
}
printf("\n再次确认密码:\n");
for (int i = 0;i < 6;i++) {
person.password[i] = _getch();
printf("*");
}
for (int i = 0;i < 6;i++) {
if (person.password[i] != X.password[i]) {
printf("\n密码不对,请重新注册账号");
return;
}
}
while (fread(&people[0], th, 1, rp) == 1)//读取信息
{
}
for (i = 0; i < 15; i++)//逐个比较
{
if (strcmp(person.account, people[i].account) == 0)
{
printf("注册失败!\n");
memset(&person, 0, len);
flag = 2;
rewind(rp);
break;
}
flag = 1;
}
if (flag == 2) {
continue;
}
//fprintf(fp, "%s\t %s\t\n", person.account, person.password);
fwrite(&person, len, 1, fp);
fprintf(fp, "\n");
flag = 0;
//return;
}
}
flag = 0;
}
if (size == 0) {
fprintf(fp, "%s %s", person.account, person.password);
}
printf("注册成功!\n");
system("pause");
system("cls");
fclose(rp);
fclose(fp);
return;
}
#include"all.h"
void teaSearch(Student* pHead)
{
Student* pCur = pHead;
int iItem, iNum = 0;
char _name[20] = { '\0' };
printf("---------------【学生信息查找】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.按学号查找学生记录\n");
printf("\t\t2.按姓名查找学生记录\n");
printf("----------------------------------------------\n");
printf("请输入(0-2):");
if (pCur == NULL)
{
printf("\n没有学生记录,请先创建学生记录!\n");
return;
}
scanf("%d", &iItem);
getchar();
while (iItem > 2 || iItem < 0)
{
char c;
while ((c = getchar()) != EOF && c != '\n');
printf("输入有误,请重新输入!\n");
scanf("%d", &iItem);
}
switch (iItem)
{
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
break;
case 1:
printf("请输入要查找的学号:");
scanf("%d", &iNum);
getchar();
while (pCur != NULL)
{
if (pCur->student_number == iNum)
{
printf("姓名:%s\n", pCur->name);
printf("学号:%d\n", pCur->student_number);
printf("专业:%s\n", pCur->major_name);
printf("年级:%d\n", pCur->grade);
//printf("成绩:", pCur->result); //?
printf("平均绩点:%.1lf\n", pCur->avg_credit);
printf("排名:%d\n", pCur->Rank);
// printf("总平均绩点:%.1lf\n", pCur->all_avg_credit);
//printf("总排名:%d\n", pCur->all_Rank);
return;
}
pCur = pCur->pNext;
}
if (pCur == NULL)
{
printf("\n数据表中没有该学生!\n");
}
break;
case 2:
printf("请输入要查找的姓名:");
scanf("%s", _name);
getchar();
while (pCur != NULL)
{
if (strcmp(pCur->name, _name) == 0)
{
printf("姓名:%s\n", pCur->name);
printf("学号:%d\n", pCur->student_number);
printf("专业:%s\n", pCur->major_name);
printf("年级:%d\n", pCur->grade);
//printf("成绩:", pCur->result);//??
printf("平均绩点:%.1lf\n", pCur->avg_credit);
printf("排名:%d\n", pCur->Rank);
//printf("总平均绩点:%lf\n", pCur->all_avg_credit);
// printf("总排名:%d\n", pCur->all_Rank);
return;
}
pCur = pCur->pNext;
}
if (pCur == NULL)
{
printf("\n数据表中没有该学生!\n");
}
break;
}
}
#include"all.h"
void Statistics(Student* pHead) {//界面待优化。。。。。。。。。。
extern subjects tmp_1[35];
extern int st_1[15][35];
printf("---------------【查找学科的及格率和优秀率】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.查找\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tips = 0;
int a, b = 0; int t = 0, m = 0;
int pq1 = 1;
Student* pcu = pHead;
while (1) {
scanf("%d", &tips);
if (tips < 0 || tips>1) {
printf("请您重新输入!\n");
}
switch (tips) {
case 0:
printf("\n返回菜单\n");
system("cls");
//system("pause");
return ;
break;
case 1:
printf("-------【请输入你要查找科目对应的数字】-------\n");
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq1 = huanhang(pq1); }
}printf2();
scanf("%d", &a);
b = 0, t = 0;
while (pcu != NULL)
{
if ((pcu->result[a] != 0)) {
if (pcu->result[a] < 60) {
t++;
}
if (pcu->result[a] >= 90) {
m++;
}
b++;
}
pcu = pcu->pNext;
}
printf("---该学科总人数为%d-------", b);
printf("---该学科不及格人数为%d---", t);
printf("---该学科优秀人数为%d-----", m);
system("pause");
system("cls");
printf("---------------【查找学科的及格率和优秀率】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.查找\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
break;
}
}
}
#include"all.h"
void stuMenu()
{
printf("---------------【学生管理系统】---------------\n\n");
printf("------------------【学生端】------------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.查询成绩\n");
printf("\t\t2.查询推免名单\n");
printf("\t\t3.返回主菜单\n");
printf("----------------------------------------------\n");
printf("请输入(0-3):");
//关于大四以下无法查询推免名单的优化
}
void stuKeyDown()
{
int userKey;
//struct student tempData;
while (1) {
scanf("%d", &userKey);
if (userKey < 0 || userKey>3) {
printf("请您重新输入!\n");
}
switch (userKey)
{
case 0:
printf("\t\t【退出系统】\n");
system("pause");
exit(0);
break;
case 1:
system("cls");
stuSearch();
printf("---------------【学生管理系统】---------------\n\n");
printf("------------------【学生端】------------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.查询成绩\n");
printf("\t\t2.查询推免名单\n");
printf("\t\t3.返回主菜单\n");
printf("----------------------------------------------\n");
printf("请输入(0-3):");
break;
case 2:
system("cls");
stuSort();
printf("---------------【学生管理系统】---------------\n\n");
printf("------------------【学生端】------------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.查询成绩\n");
printf("\t\t2.查询推免名单\n");
printf("\t\t3.返回主菜单\n");
printf("----------------------------------------------\n");
printf("请输入(0-3):");
//system("pause");
break;
case 3:
//printf("\t\t【返回主菜单】\n");
system("pause");
while (1)
{
system("cls");
Menu();
Key();
system("pause");
}
break;
default:
printf("输入错误!请重新输入:");
break;
}
}
}
#include"all.h"
void stuSearch()
{
printf("---------------【学生信息查找】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.查找学年学生信息\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tip = 0;
extern subjects tmp_1[35];
extern int st_1[15][35];
int G[10] = { 0 };
subjects Y[10] = { 0 };
Student X[100] = { 0 };
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>1) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
return;
break;
case 1:
int idx = 0;
int cnt = 0;
int number, g;
int c;
int canshu2 = 1;
printf("\n请输入您的学号:");
scanf("%d", &number);
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu2 = huanhang(canshu2); }
}
printf2();
printf("\n请输入您的学院编号:");//注释待补充。。。。。。。
scanf("%d", &c);
printf("\n请输入您要查询的学年:");
scanf("%d", &g);
char filename[10];//基础信息的文件名由入学年份(学号前2位)和年级组成
printf("请输入文件名(包括入学年份,学年)\n");
scanf("%s", filename);
FILE* file = fopen(filename, "r");
for (int i = 0;i <= 30;i++) {
if (st_1[c][i] == 1) {
Y[idx] = tmp_1[i];
G[idx] = i;
idx++;
}
}
if (file == NULL) {
printf("无法打开文件: %s\n", filename);
break;
}
while (fscanf(file, "%s%d%s%d%d%lf%lf%lf%lf%lf%lf%d%lf", &X[cnt].name, &X[cnt].student_number, &X[cnt].major_name,&X[cnt].college, & X[cnt].grade, &X[cnt].result[G[0]], &X[cnt].result[G[1]], &X[cnt].result[G[2]], &X[cnt].result[G[3]], &X[cnt].result[G[4]], &X[cnt].avg_credit, &X[cnt].Rank,&X[cnt].all_avg_credit) == 13) {
cnt++;
}
fclose(file);
printf("学生的在第%d学年的信息如下:\n", g);
printf("学号\t姓名\t年级\t专业\t平均绩点\t排名\t%s\t%s\t%s\t%s\t%s\t\n", Y[0].name, Y[1].name, Y[2].name, Y[3].name, Y[4].name);
for (int i = 0;i < cnt;i++) {
if (X[i].student_number == number) {
printf("%d\t%s\t%d\t%s\t%.1lf\t\t%d\t", X[i].student_number, X[i].name, X[i].grade,X[i].major_name,X[i].avg_credit,X[i].Rank);
for (int j = 0; j < 35; j++) {
if (st_1[c][j] == 1) {
printf("%.1lf\t\t", X[i].result[j]);
}
}printf("\n");
}
}
break;
}
}
}
#include"all.h"
void stuSort()
{
printf("---------------【学生推免名单查询】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.打印推免名单\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tip = 0;
extern int tmp_4[15];
extern int tuimian[15];
Student X[100] = { 0 };
int cnt = 0;
//int g;
int number;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>1) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
return;
break;
case 1:
char filename[10];//排名信息的文件名由入学年份(学号前2位)和_年级组成,推免排名文件名最后的年级改为5
printf("\n请输入您的学号:\n");
scanf("%d", &number);
printf2(); printf("请输入学院数字\n");int canshu4 = 1;for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu4 = huanhang(canshu4); }
}printf2();
//printf("\n请选择您的专业:\n");
int a;
scanf("%d", &a);
printf("\n请以正确格式输入对应信息(入学年份+下划线+5+专业编号)");
scanf("%s", filename);
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件: %s\n", filename);
break;
}
cnt = 0;
while (fscanf(file, "%d%d%s%lf", &X[cnt].all_Rank ,&X[cnt].student_number,&X[cnt].name, &X[cnt].all_avg_credit ) == 4) {
cnt++;
}
fclose(file);
printf("排名\t学号\t姓名\t总绩点\t\n");
for (int i = 1;i <= cnt&&i<=tuimian[a];i++) {
printf("%d\t%d\t%s\t%.1lf\t\n", X[i-1].all_Rank, X[i - 1].student_number, X[i - 1].name, X[i - 1].all_avg_credit);
}
break;
}
}
}
//Add_quality_outcomes.c
#include"all.h"
void subject()
{
//
//注意完善学科备注包括学科名称对应数字。
printf("---------------【学科信息增加、修改和删除】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.增加学科\n");
printf("\t\t2.修改学科信息\n");
printf("\t\t3.删除学科\n");
printf("\t\t4.调整某专业的学科种类\n");
printf("----------------------------------------------\n");
printf("请输入(0-4):");
int tip;
int pq2 = 1;
int pq3 = 1;
int pq4 = 1;
extern subjects tmp_1[35];
extern bool st_3[35];
extern int st_1[15][35];
static int n = 29;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>4) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
maneMenu();
maneKeyDown();
system("pause");
break;
case 1:
n++;
printf("\n请输入您要增加的学科名称:\n");
scanf("%s", &tmp_1[n].name);
printf("\n请输入您要增加的学科类别:\n");
int o;
scanf("%d", &o);
if (o == 1) {
tmp_1[n].st = 1;
}
else {
tmp_1[n].st = 0;
}
printf("\n请输入您要增加的学科学时\n");
scanf("%d", &tmp_1[n].class_hour);
printf("\n请输入您要增加的学科学分\n");
scanf("%lf", &tmp_1[n].credit);
st_3[n] = 1;
printf("\n增加成功\n");
system("cls");
system("pause");
subject();
break;
case 2:
int x4;
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq2 = huanhang(pq2); }
}printf2();
printf("\n请输入您要修改的学科编号:\n");
scanf("%d", &x4);
printf("\n请输入您要修改的学科名称:\n");
scanf("%s", &tmp_1[x4].name);
printf("\n请输入您要修改的学科类别:\n");
int o1;
scanf("%d", &o1);
if (o1 == 1) {
tmp_1[n].st = 1;
}
else {
tmp_1[n].st = 0;
}
printf("\n请输入您要修改的学科学时\n");
scanf("%d", &tmp_1[x4].class_hour);
printf("\n请输入您要修改的学科学分\n");
scanf("%lf", &tmp_1[x4].credit);
printf("\n修改成功\n");
system("cls");
system("pause");
subject();
break;
case 3:
//subjects X;
int x3;
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq3 = huanhang(pq3); }
}printf2();
printf("\n请选择您要删除的学科编号:\n");
scanf("%d", &x3);
st_3[x3] = 0;
printf("\n删除成功\n");
system("cls");
system("pause");
subject();
break;
case 4:
printf2();
int p = 1;for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); p = huanhang(p); }
}printf2();
int min = 0;
printf("\n请选择您要调整课程的专业编号:\n");
scanf("%d", &min);
printf2();
for (int i = 0; i < 35; i++) {
if (st_3[i] == 1) { if (i < 10)printf("0");printf("%d%-30s", i, tmp_1[i].name); pq4 = huanhang(pq4); }
}printf2();
printf("\n请选择该专业新录入的学科,当输入-1时结束录入\n");
int f[15] = { 0 };
int i = 0;
scanf("%d", &f[i]);
while (f[i] != -1)//标记学科种类
{
i++;
scanf("%d", &f[i]);
}
for (int j = 0;j <= n;j++) {//将该专业学科归0
st_1[min][j] = 0;
}
for (int j = 0;j <= n;j++) {//更新学科种类
if (f[j] != 0&&f[j]!=-1) {
st_1[min][j] = 1;
}
}
system("cls");
system("pause");
subject();
break;
}
}
}
#include"all.h"
void systemMenu()
{
printf("---------------【学生管理系统】---------------\n\n");
printf("------------------【教师端】------------------\n\n");
printf("\t\t0.退出系统\n");
printf("\t\t1.录入信息\n");
printf("\t\t2.浏览信息\n");
printf("\t\t3.删除信息\n");
printf("\t\t4.修改信息\n");
printf("\t\t5.查找信息\n");
printf("\t\t6.成绩排序\n");
printf("\t\t7.各科成绩分析\n");
printf("\t\t8.返回主菜单\n");
printf("----------------------------------------------\n");
printf("请输入(0-8):");
}
void keyDown()
{
int userKey;
//struct student tempData;
Student* pHead=NULL ;
while (1) {
scanf("%d", &userKey);
if (userKey < 0 || userKey>8) {
printf("请您重新输入!\n");
}
switch (userKey)
{
case 0:
printf("\t\t【退出系统】\n");
system("pause");
exit(0);
break;
case 1:
system("cls");
pHead = Create();
system("pause");
system("cls");
systemMenu();
break;
case 2:
system("cls");
all_student(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 3:
system("cls");
pHead = Delete(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 4:
system("cls");
Modify_students(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 5:
system("cls");
teaSearch(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 6:
system("cls");
teaSort(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 7:
system("cls");
Statistics(pHead);
system("pause");
system("cls");
systemMenu();
break;
case 8:
while (1)
{
system("cls");
Menu();
Key();
system("pause");
}
break;
default:
printf("输入错误!请重新输入:");
break;
}
}
}
#include"all.h"
void SwapStu(Student* Stu_1, Student* Stu_2)
{
Student tmp;
tmp = *Stu_1;
*Stu_1 = *Stu_2;
*Stu_2 = tmp;
}
void teaSort(Student*pHead)
{
printf("---------------【学生排名】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.年度绩点排名\n");
printf("\t\t2.推免排名\n");
printf("----------------------------------------------\n");
printf("请输入(0-2):");
int tip = 0;
int flag = 0;
Student* pCur = pHead, * pTemp = NULL;
Student* pTemp1 = pHead;
int i, iItem , iCount = 0;
int avg_rank[15] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, };
int all_rank[15] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, };
int fg1 = 1;
int fg = 1;
int fg2 = 1;
int canshu7 = 1;//学院备注
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>2) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
return;
break;
case 1:
//Student * p, p1, p2;
if (pCur == NULL)
{
printf("\n没有学生记录!\n");
return;
}
do {
iCount++;
pCur = pCur->pNext;
} while (pCur != NULL);
pTemp = (Student*)malloc(iCount * sizeof(Student));
//pTemp1= (Student*)malloc(iCount * sizeof(Student));
pCur = pHead;
for (i = 0; i < iCount; i++)
{
pTemp[i].student_number = pCur->student_number;
strcpy(pTemp[i].name, pCur->name);
pTemp[i].avg_credit = pCur->avg_credit;
pTemp[i].college = pCur->college;
pTemp[i].all_avg_credit = pCur->all_avg_credit;
pCur = pCur->pNext;
}
pCur = pHead;
//ShowSortMenu();
printf("请选择排序方式:");
printf("\n按1进行学号排序,按2进行成绩排序,按0结束排序\n");
while (1)
{
scanf("%d", &iItem);
int a1 = 0;int a = 0;
if (flag == 1) {
break;
}
switch (iItem)
{
case 0:
flag = 1;
printf("已结束排序\n");
break;
case 1:
fg = 1;
while (fg) {
fg = 0;
for (int j = 0;j + 1 < iCount;j++) {
if (pTemp[j].student_number > pTemp[j + 1].student_number)
{
fg = 1;
SwapStu(pTemp + j, pTemp + j + 1);
}
}
}
printf2(); for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
}printf2();
printf("\n请输入您要查看排名的学院编号:\n");
scanf("%d", &a);
for (int i = 0;i < iCount;i++) {
if (pTemp[i].college == a) {
printf("%s | %d| %.1lf\n", pTemp[i].name, pTemp[i].student_number, pTemp[i].avg_credit);
}
}
break;
case 2:
fg1 = 1;
while (fg1) {
fg1 = 0;
for (int j = 0;j + 1 < iCount;j++) {
if (pTemp[j].avg_credit < pTemp[j + 1].avg_credit)
{
fg1 = 1;
SwapStu(pTemp + j, pTemp + j + 1);
}
}
}
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
}
printf2();
printf("\n请输入您要查看排名的学院编号:\n");
/*for (int i = 0;i < 15;i++) {
if (st_4[i]) {
printf("%d %s\t\t", i, tmp_3[i].name);
}if ((i + 1) % 3 == 0) {
printf("\n");
}
}*/
scanf("%d", &a1);
for (int i = 0;i < iCount;i++) {
if (pTemp[i].college == a1) {
pTemp[i].Rank = avg_rank[a1]++;
printf(" %d| %s| %d| %.1lf\n", pTemp[i].Rank, pTemp[i].name, pTemp[i].student_number, pTemp[i].avg_credit);
}
}
for (pTemp1;pTemp1;pTemp1 = pTemp1->pNext) {
for (int i = 0;i < iCount;i++) {
if (pTemp1->student_number == pTemp[i].student_number) {
pTemp1->Rank = pTemp[i].Rank;
}
}
}pTemp1 = pHead;
char filename[10];
printf("\n请输入文件名(学号前两位加下划线加年级加院系)\n");
scanf("%s", filename);
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s", filename);
}
else {
for (int i = 0; i < iCount; i++) {
if (pTemp[i].college == a1) {
fprintf(file, "%d |%d |%s |%.1lf\n", pTemp[i].Rank, pTemp[i].student_number, pTemp[i].name, pTemp[i].avg_credit);
}
}
fclose(file);
}break;
}
}
/*system("palse");
system("cls");
teaSort(pHead);*/
break;
case 2:
if (pCur == NULL)
{
printf("\n没有学生记录!\n");
return;
}
iCount = 0;
pCur = pHead;
do {
iCount++;
pCur = pCur->pNext;
} while (pCur != NULL);
pTemp = (Student*)malloc(iCount * sizeof(Student));
//pTemp1= (Student*)malloc(iCount * sizeof(Student));
pCur = pHead;
for (i = 0; i < iCount; i++)
{
pTemp[i].student_number = pCur->student_number;
strcpy(pTemp[i].name, pCur->name);
pTemp[i].avg_credit = pCur->avg_credit;
pTemp[i].college = pCur->college;
pTemp[i].all_avg_credit = pCur->all_avg_credit;
pCur = pCur->pNext;
}
pCur = pHead;
char filename[10];
fg = 1;
while (fg2) {
fg2 = 0;
for (int j = 0;j+1 < iCount;j++) {
if (pTemp[j].all_avg_credit < pTemp[j + 1].all_avg_credit)
{
fg2 = 1;
SwapStu(pTemp + j, pTemp + j + 1);
}
}
}printf2(); for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu7 = huanhang(canshu7); }
}printf2();
printf("\n请输入您要查看排名的学院编号:\n");
int a2;
scanf("%d", &a2);
for (int i = 0;i < iCount;i++) {
if (pTemp[i].college == a2) {
pTemp[i].all_Rank = all_rank[a2]++;
printf(" %d| %s| %d| %.1lf\n", pTemp[i].all_Rank,pTemp[i].name, pTemp[i].student_number, pTemp[i].all_avg_credit);
}
}
printf("\n请输入文件名(学号前两位加下划线加5加院系)\n");
scanf("%s", filename);
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s", filename);
}
for (int i = 0; i<iCount; i++) {
if (pTemp[i].college == a2) {
fprintf(file, "%d %d %s %.1lf\n", pTemp[i].all_Rank, pTemp[i].student_number, pTemp[i].name, pTemp[i].all_avg_credit);
}
}
fclose(file);
break;
}
}
}
#include"all.h"
void tuimian_modify()
{
printf("---------------【推免人数修改】---------------\n\n");
printf("\t\t0.返回菜单\n");
printf("\t\t1.修改专业推免人数\n");
printf("----------------------------------------------\n");
printf("请输入(0-1):");
int tip = 0;
extern int tuimian[15];
int canshu3 = 1;
while (1)
{
scanf("%d", &tip);
if (tip < 0 || tip>1) {
printf("请您重新输入!\n");
}
switch (tip)
{
case 0:
printf("\n返回菜单\n");
system("cls");
system("pause");
maneMenu();
maneKeyDown();
break;
case 1:
printf2();
for (int i = 0; i < 15; i++) {
if (st_4[i] == 1) { printf("%d%-30s", i, tmp_3[i].name); canshu3 = huanhang(canshu3); }
}
printf2();
printf("\n请选择您要修改推免人数的专业\n");
int a;
scanf("%d", &a);
printf("\n请输入您要修改的人数:");
int b;
scanf("%d", &b);
tuimian[a] = b;
system("cls");
system("pause");
tuimian_modify();
break;
}
}
}
效果图:
这个程序虽然有很多bug但好在还是能跑,功能有很多不合理的地方,但是我的第一个手打项目还是要纪念一下的,也希望能帮到有需要的人。