#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>//文件包含:exit()函数
#define N 80//宏定义//菜单
int menu()
{int m;do{printf("\t========成绩管理系统========\n\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\t0. 退出\n\n");printf("\t请选择:");scanf("%d", &m);} while (m < 0 && m>6);//菜单选项外跳出return m;
}//学生信息
typedef struct
{char xh[10];//学号char xm[20];//姓名,10个汉字以内char xb[3];//性别,只能保存一个汉字int nl;//年龄
}Student;
//课程信息
typedef struct
{char kh[10];//课号,长度10字符以内char km[25];//课名,12个汉字以内float xf;//课程学分,为一个浮点数
}Course;
//学生选课信息
typedef struct
{char xh[10];//学号,长度10字符以下char kh[10];//课号float c;//成绩,为一个浮点数
}Select;//学生的成绩单信息
typedef struct
{char xh[10];//学号char xm[20];//姓名float cj[30];//各门课程成绩float zpj;//加权平均分float zxf;//总修习学分
}Score;
//Score cjlist[N];//学生的成绩信息//初始化数据
void init(Student slist[], int *scount, Course clist[], int *ccount, Select sclist[], int *sccout)
{//读入学生信息FILE *fpStu = fopen("D:\\Students.txt", "r");if (!fpStu){printf("Can't open Students.txt file\n");exit(1);;//失败推出程序}*scount = 0;while (!feof(fpStu)){fscanf(fpStu, "%s %s %s %d", slist[*scount].xh, slist[*scount].xm, slist[*scount].xb, &slist[*scount].nl);(*scount)++;}fclose(fpStu);//读入课程信息FILE *fpCou = fopen("D:\\Courses.txt", "r");if (!fpCou){printf("Can't open Courses.txt file\n");exit(1);;//失败推出程序}*ccount = 0;while (!feof(fpCou)){fscanf(fpCou, "%s %s %f", clist[*ccount].kh, clist[*ccount].km, &clist[*ccount].xf);(*ccount)++;}fclose(fpCou);//读入选课信息FILE *fpSel = fopen("D:\\Select.txt", "r");if (!fpSel){printf("Can't open Select.txt file\n");exit(1);;//失败推出程序}*sccout = 0;while (!feof(fpSel)){fscanf(fpSel, "%s %s %f", sclist[*sccout].xh, sclist[*sccout].kh, &sclist[*sccout].c);(*sccout)++;}fclose(fpSel);printf("成功导入数据\n");
}//建立成绩单
void create_cjlist(Student slist[], int scount, Select sclist[], int sccount, Course clist[], int ccount, Score cjlist[], int *cjcount)
{*cjcount = 0;//成绩单初始化0char temp_xh[10] = " ";//for (int i = 0; i < sizeof(sclist) / sizeof(Select); i++)for (int i = 0; i < sccount; i++)//遍历选课信息{if(strcmp(sclist[i].xh, temp_xh) != 0)//判断成绩单信息是否已录{strcpy(temp_xh, sclist[i].xh);//xh复制到temp_xhstrcpy(cjlist[*cjcount].xh, sclist[i].xh);//成绩单学号int i_xh = 0;while (strcmp(slist[i_xh].xh, sclist[i].xh) != 0 && i_xh < scount)i_xh++;if (i_xh == scount){printf("未根据学号找到相关学生信息!\n");exit(1);//输入数据错误退出程序}strcpy(cjlist[*cjcount].xm, slist[i_xh].xm);//成绩单姓名//cjlist[*cjcout].cj[0] = sclist[i].c;//数学成绩for (int i_cc = 0; i_cc < ccount; i_cc++){cjlist[*cjcount].cj[i_cc] = sclist[i].c;//数学成绩 英语成绩 计算机成绩i++;}i--;//加权平均分cjlist[*cjcount].zpj = (cjlist[*cjcount].cj[0] * clist[0].xf + cjlist[*cjcount].cj[1] * clist[1].xf + cjlist[*cjcount].cj[2] * clist[2].xf) / (clist[0].xf + clist[1].xf + clist[2].xf);//总学分cjlist[*cjcount].zxf = clist[0].xf + clist[1].xf + clist[2].xf;(*cjcount)++;}}
} //显示
int disp()//查找功能下的第二级菜单
{int i;printf("\t\t1.显示学生数据\n");printf("\t\t2.显示课程数据\n");printf("\t\t3.显示成绩单信息\n");printf("\t请选择:");scanf("%d", &i);return i;//返回选项}
//显示学生数据
void disp_stud(Student slist[], int scount)
{printf("\t------------------------------------------------------\n");printf("\t学号       姓名      性别      年龄\n");printf("\t------------------------------------------------------\n");for (int i = 0; i < scount; i++){printf("\t%-15s%-17s%-17s%-15d%\n", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);printf("\t------------------------------------------------------\n");}
}
//显示课程数据
void disp_course(Course clist[], int ccount)
{printf("\t------------------------------------------------------\n");printf("\t课号       课名      课程学分\n");printf("\t------------------------------------------------------\n");for (int i = 0; i < ccount; i++){printf("\t%-16s%-16s%-15f%\n", clist[i].kh, clist[i].km, clist[i].xf);printf("\t------------------------------------------------------\n");}
}
//显示成绩单信息
void disp_cjlist(Score cjlist[], int cjcout, int ccount)
{printf("\t---------------------------------------------------------------------------------------------------------\n");printf("\t学号        姓名      各门课程成绩          加权平均分       总修习学分\n");printf("\t---------------------------------------------------------------------------------------------------------\n");for (int i = 0; i < cjcout; i++){printf("\t%-15s%-15s", cjlist[i].xh, cjlist[i].xm);for (int i_c = 0; i_c < ccount; i_c++)printf(" %f", cjlist[i].cj[i_c]);printf("\t%-24f%-15f%\n", cjlist[i].zpj, cjlist[i].zxf);printf("\t---------------------------------------------------------------------------------------------------------\n");}
}//输入
int input()//查找功能下的第二级菜单
{int i;printf("\t\t1.学生信息输入\n");printf("\t\t2.课程信息输入\n");printf("\t\t3.选课信息输入\n");printf("\t请选择:");scanf("%d", &i);return i;//返回选项}
//学生信息输入
int input_stud(Student slist[], int *scount)
{char jixu = 'Y';char x[10];while (jixu != 'n'&&jixu != 'N'){printf("输入学生学号:");scanf("%s", slist[*scount].xh);printf("输入学生姓名:");scanf("%s", slist[*scount].xm);printf("输入学生性别:");scanf("%s", slist[*scount].xb);printf("输入学生年龄:");scanf("%d", &slist[*scount].nl);(*scount)++;gets(x);printf("输入下一个?(Y/N)\n");scanf("%c", &jixu);}printf("学生信息输入成功!\n");return *scount;
}
//课程信息输入
int input_course(Course clist[], int *ccount)
{char jixu = 'Y';char x[10];while (jixu != 'n'&&jixu != 'N'){printf("输入课程课号:");scanf("%s", clist[*ccount].kh);printf("输入课程课名:");scanf("%s", clist[*ccount].km);printf("输入课程学分:");scanf("%f", &clist[*ccount].xf);(*ccount)++;gets(x);printf("输入下一个?(Y/N)\n");scanf("%c", &jixu);}printf("课程信息输入成功!\n");return *ccount;
}
//选课信息输入
int input_select(Student slist[], int scount, Select sclist[], int *sccount)
{char jixu = 'Y';char x[10];while (jixu != 'n'&&jixu != 'N'){printf("输入学生学号:");char temp_scxh[10];scanf("%s", temp_scxh);int i_xh = 0;while (strcmp(slist[i_xh].xh, temp_scxh) != 0 && i_xh < scount)i_xh++;if (i_xh == scount){printf("未根据学号找到相关学生信息,无法插入选课信息!\n");return -1;//错误退出}strcpy(sclist[*sccount].xh, temp_scxh);//复制printf("输入选课课号:");scanf("%s", sclist[*sccount].kh);printf("输入成绩:");float temp_scc;scanf("%f", &temp_scc);if (-1 <= temp_scc <= 120){sclist[*sccount].c = temp_scc;}else{printf("输入成绩超出范围\n");return -1;}(*sccount)++;gets(x);printf("输入下一个?(Y/N)\n");scanf("%c", &jixu);}printf("选课信息输入成功!\n");return *sccount;
}//删除
int delete()
{int i;printf("\t\t1.删除学生记录\n");printf("\t\t2.删除课程记录\n");printf("\t\t3.删除选课信息\n");printf("\t请选择:");scanf("%d", &i);return i;//返回选项
}
//删除学生记录
void delete_stud(Student slist[], int *scount)
{char temp_x[20];printf("\t输入要删除的学生姓名或学号:");scanf("%s", temp_x);int i = 0;while (strcmp(slist[i].xm, temp_x) != 0 && strcmp(slist[i].xh, temp_x) != 0 && i< (*scount))//字符串比较i++;if (i == (*scount)){printf("未找到相关学生信息!\n");return -1;}for (int j = i; j < (*scount) - 1; j++){strcpy(slist[j].xh, slist[j + 1].xh);//复制字符串strcpy(slist[j].xm, slist[j + 1].xm);strcpy(slist[j].xb, slist[j + 1].xb);slist[j].nl = slist[j + 1].nl;}(*scount)--;printf("该学生信息已删除!\n");//return *scount;
}
//删除课程记录
void delete_course(Course clist[], int *ccount)
{char temp_k[25];printf("\t输入要删除的课程名或课程号:");scanf("%s", temp_k);int i = 0;while (strcmp(clist[i].kh, temp_k) != 0 && strcmp(clist[i].km, temp_k) != 0 && i<*ccount)//字符串比较i++;if (i == *ccount){printf("未找到相关课程信息!\n");return -1;}for (int j = i; j < *ccount - 1; j++){strcpy(clist[j].kh, clist[j + 1].kh);//复制字符串strcpy(clist[j].km, clist[j + 1].km);clist[j].xf = clist[j + 1].xf;}(*ccount)--;printf("该课程信息已删除!\n");
}
//删除选课信息
void delete_select(Select sclist[], int *sccount)
{char temp_xh[10];printf("\t输入学号删除与其相关的若干课程:");scanf("%s", temp_xh);int n = 0;for (int i = 0; i < *sccount; i++){if (strcmp(sclist[i].xh, temp_xh)){for (int j = i; j < *sccount - 1; j++){strcpy(sclist[i].xh, sclist[i + 1].xh);strcpy(sclist[i].kh, sclist[i + 1].kh);sclist[i].c = sclist[i + 1].c;}n++;(*sccount)--;}}if (n == 0){printf("未找到与学号相关的选课信息!\n");return -1;}printf("与学号相关的选课信息已删除!\n");
}//查询
int query()
{int i;printf("\t\t1.查询学生信息\n");printf("\t\t2.查询课程信息\n");printf("\t\t3.查询学生成绩\n");printf("\t请选择:");scanf("%d", &i);return i;//返回选项
}
//查询学生信息
void query_stud(Student slist[], int scount)
{char temp_x[20];printf("\t输入要查询的学生姓名或学号:");scanf("%s", temp_x);int i = 0;while (strcmp(slist[i].xm, temp_x) != 0 && strcmp(slist[i].xh, temp_x) != 0 && i< scount)//字符串比较i++;if (i == scount){printf("未找到相关学生信息!\n");return -1;}printf("-------------------------------------------------------------------\n");printf("学号   姓名  性别  年龄\n");printf("-------------------------------------------------------------------\n");printf("%-10s%-10s%-10s%-10d%\n",slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);printf("-------------------------------------------------------------------\n");
}
//查询课程信息
void query_course(Course clist[], int ccount)
{char temp_k[25];printf("\t输入要查询的课程名或课程号:");scanf("%s", temp_k);int i = 0;while (strcmp(clist[i].kh, temp_k) != 0 && strcmp(clist[i].km, temp_k) != 0 && i< ccount)//字符串比较i++;if (i == ccount){printf("未找到相关课程信息!\n");return -1;}printf("-------------------------------------------------------------------\n");printf("课号   课名  课程学分\n");printf("-------------------------------------------------------------------\n");printf("%-10s%-10s%-10f%\n",clist[i].kh, clist[i].km, clist[i].xf);printf("-------------------------------------------------------------------\n");}
//查询学生成绩
void query_cjlist(Score cjlist[], int cjcount, int ccount)
{char temp_xh[10];printf("\t输入要查询学生的学号:");scanf("%s", temp_xh);int i = 0;while ((strcmp(cjlist[i].xh, temp_xh) != 0) && i< cjcount)//字符串比较i++;if (i == cjcount){printf("未找到相关学生信息!\n");return -1;}printf("\t---------------------------------------------------------------------------------------------------------\n");printf("\t学号     姓名      各门课程成绩          加权平均分       总修习学分\n");printf("\t---------------------------------------------------------------------------------------------------------\n");printf("\t%-15s%-15s", cjlist[i].xh, cjlist[i].xm);for (int i_c = 0; i_c < ccount; i_c++)printf(" %f", cjlist[i].cj[i_c]);printf("\t%-24f%-15f%\n", cjlist[i].zpj, cjlist[i].zxf);printf("\t---------------------------------------------------------------------------------------------------------\n");//printf("-------------------------------------------------------------------\n");//printf("学号  姓名  各门课程成绩  加权平均分   总修习学分\n");//printf("-------------------------------------------------------------------\n");//printf("%-10s%-10s%", cjlist[i].xh, cjlist[i].xm);//for (int i_cj = 0; i_cj < ccount; i_cj++)//{// printf("%-10f", cjlist[i_cj].cj);//}//printf("%-10f%-10f%", cjlist[i].zpj, cjlist[i].zxf);//printf("-------------------------------------------------------------------\n");
}//导出
int write()
{int i;printf("\t\t1.导出学生、课程、选课信息数据\n");printf("\t\t2.导出学生成绩\n");printf("\t请选择:");scanf("%d", &i);return i;//返回选项
}
//导出学生、课程、选课信息数据
void write_to_file1(Student slist[], int scount, Course clist[], int ccount, Select sclist[], int sccount)
{//导出学生信息FILE *fpStu = fopen("D:\\Students0.txt", "wb");if (!fpStu){printf("Can't open Students.txt file\n");exit(1);;//失败退出程序}for (int iStu = 0; iStu < scount; iStu++){fprintf(fpStu, "%s %s %s %d\n", slist[iStu].xh, slist[iStu].xm, slist[iStu].xb, slist[iStu].nl);}fclose(fpStu);//导出课程信息FILE *fpCou = fopen("D:\\Courses0.txt", "wb");if (!fpCou){printf("Can't open Courses.txt file\n");exit(1);;//失败退出程序}for (int iCou = 0; iCou < ccount; iCou++){fprintf(fpCou, "%s %s %f\n", clist[iCou].kh, clist[iCou].km, clist[iCou].xf);}fclose(fpCou);//导出选课信息FILE *fpSel = fopen("D:\\Select0.txt", "wb");if (!fpSel){printf("Can't open Select.txt file\n");exit(1);;//失败退出程序}for (int iSel = 0; iSel < sccount; iSel++){fprintf(fpSel, "%s %s %f\n", sclist[iSel].xh, sclist[iSel].kh, sclist[iSel].c);}fclose(fpSel);
}
//导出学生成绩
void write_to_file2(Score cjlist[], int cjcount, int ccount)
{FILE *fp;if ((fp = fopen("D:\\chengji0.txt", "wb")) == NULL) /* c盘下创建c:\123.txt文件*/{printf("\nFailed to open file.");getchar();exit(1);}for (int i = 0; i < cjcount; i++){fprintf(fp, "%s %s ", cjlist[i].xh, cjlist[i].xm);for (int i_cj = 0; i_cj < ccount; i_cj++){fprintf(fp, "%f ", cjlist[i_cj].cj);}fprintf(fp, "%f %f\n", cjlist[i].zpj, cjlist[i].zxf);}fclose(fp);printf("成功导出学生成绩\n");
}int main()//主函数
{Student slist[N];//用来记录学生信息的数组存储int scount;//学生信息总量Course clist[N];//用来记录课程信息的数组存储int ccount;Select sclist[N];//学生选课信息和成绩int sccount;Score cjlist[N];//成绩int cjcount;for (;;)//死循环{switch (menu()){case 1:init(slist, &scount, clist, &ccount, sclist, &sccount); create_cjlist(slist, scount, sclist, sccount, clist, ccount, cjlist, &cjcount); break;case 2:switch (disp()){case 1:disp_stud(slist, scount); break;case 2:disp_course(clist, ccount); break;case 3:disp_cjlist(cjlist, cjcount, ccount); break;} break;case 3:switch (input()){case 1:input_stud(slist, &scount); break;case 2:input_course(clist, &ccount); break;case 3:input_select(slist, scount, sclist, &sccount); break;} break;case 4:switch (delete()){case 1:delete_stud(slist, &scount); break;case 2:delete_course(clist, &ccount); break;case 3:delete_select(sclist, &sccount); break;} break;case 5:switch (query()){case 1:query_stud(slist, scount); break;case 2:query_course(clist, ccount); break;case 3:query_cjlist(cjlist, cjcount, ccount); break;} break;case 6:switch (write()){case 1:write_to_file1(slist, scount, clist, ccount, sclist, sccount); break;case 2:write_to_file2(cjlist, cjcount, ccount); break;} break;case 0:exit(0); break;default:printf("*输入错误!*"); break;}}return 0;
}

chengji0.txt
01 Xiaoli 0.000000 0.000000 0.000000 90.000000 10.000000
02 Xiaowang 0.000000 0.000000 0.000000 85.000000 10.000000
03 Xiaozhang 0.000000 0.000000 0.000000 80.000000 10.000000

Courses0.txt:
000001 Math 5.000000
000002 English 2.500000
000003 Computer 2.500000

Select0.txt
01 000001 90.000000
01 000002 90.000000
01 000003 90.000000
02 000001 85.000000
02 000002 85.000000
02 000003 85.000000
03 000001 80.000000
03 000002 80.000000
03 000003 80.000000
Students0.txt
01 Xiaoli nan 20
02 Xiaowang nan 20
03 Xiaozhang nv 20

PerformanceManagementSystem相关推荐

最新文章

  1. java sessionstate_在Java Web开发中自定义Session
  2. [转]OpenStack的网络模式
  3. The world at your fingertips — 天涯明月刀幕后23(海战)
  4. php动态网页设计教材,PHP动态网页设计(第2版)
  5. 适配器模式(PHP实现)
  6. 关于inodes占用100%的问题及解决方法续集如何解决clientmqueue目录文件太多
  7. -3dB下的正确率是100%!!!
  8. php jquery 局部页面刷新,jQuery页面刷新(局部、全部)问题分析_jquery
  9. [InnoDB系列] - InnoDB释放表空间
  10. synchronized关键字,Lock接口以及可重入锁ReentrantLock
  11. oracle 聚类索引,carrot2-cluster 使用 实现的读取数据库进行聚类的程序,同时也可以 lucene索引 Oracle 238万源代码下载- www.pudn.com...
  12. pycharm设置python运行根目录
  13. 时事点评-红芯浏览器事件
  14. Python定时执行程序(schedule)
  15. Java:爬取代理ip,并使用代理IP刷uv
  16. 使用SendCloud API来制作发送邮件的插件
  17. 为什么要使用十六进制
  18. 海信IP202H盒子破解方法
  19. 工厂自动化的生产线属于计算机应用,计算机试题
  20. 【Java设计模式】工厂方法

热门文章

  1. 控制手柄分体式滑环在船用起重机中的运用
  2. SAP中复制创建采购申请的过程
  3. 程序员的四个暑假:从打工开始到打工结束
  4. ncbi查找目的基因序列_如何获得基因序列——在NCBI中查找目的基因实例.PDF
  5. 新人怎么发邮件,怎么给客户发一封得体的邮箱—TOM邮箱分享
  6. 【音频处理】python将两个单声道wav音频合成一个双声道wav音频_立体声感
  7. 搭建web服务端网络共享及实时备份(只能用堡垒机连接)
  8. XCTF-mobile app3
  9. 【plang 1.4.4】编写贪吃蛇脚本
  10. 一款网课学习辅助软件