zoukankan      html  css  js  c++  java
  • 成绩查询系统(未完成版)

    //
    // code by : yizimi 远欣
    //
    // 不知道该瞎打什么,就写一个无聊的成绩查询吧
    //

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <ctime>
    #include <queue>
    #include <windows.h>
    #include <conio.h>
    #include <algorithm>
    #include <fstream> 
    using namespace std; 
    
    struct score {
    	int Math, Chinese, Endlish, C_PlusPlus, Python, Java;
    	int sum;
    	inline void get_sum() {
    		sum = Math + Chinese + Endlish + C_PlusPlus + Python + Java;
    	}
    	score(int _m = 0, int _c = 0, int _e = 0, int _c_ = 0, int _p = 0, int _j = 0, int _sum = 0) 
    	 : Math(_m), Chinese(_c), Endlish(_e), C_PlusPlus(_c_), Python(_p), Java(_j), sum(_sum) {}
    }; 
    struct student {
    	score sc;
    	char name[20];
    	int rank;
    	int num; // 编号 
    	void put_info() {
    		printf("     %4d : ", num);
    		for(int i = 0; i <= 5; i++) {
    			if(name[i] == 0) putchar(' ');
    			else  putchar(name[i]);
    		}
    		printf("  %3d    %3d    %3d    %3d    %3d    %3d    %3d    %4d
    ", rank, sc.Chinese,
    			sc.Math, sc.Endlish, sc.C_PlusPlus, sc.Python, sc.Java, sc.sum);
    	}
    	student(score _sc = score(), int _rank = 0, int _num = 0) 
    	 : sc(_sc), rank(_rank), num(_num) {
    		for(int i = 0; i <= 5; ++i)
    			name[i] = 0;	
    	}
    } stu[100010]; 
    inline bool cmp1(student a, student b) {
    	if(a.num == 0) return false;
    	if(b.num == 0) return true;
    	return a.sc.sum > b.sc.sum;
    }
    inline bool cmp2(student a, student b) {
    	if(a.num == 0) return false;
    	if(b.num == 0) return true;
    	return a.num < b.num;
    }
    int stu_cnt;
     
    inline void sputs(string a) {
    	int total = a.size();
    	for(int i = 0; i <= total - 1; ++i) 
    		putchar(a[i]), Sleep(40);
    	putchar('
    ');
    }
    #define clr system("cls")
    #define pus system("pause")
    #define nxl puts("")
    
    inline void start_words(void);
    inline void menu(void);
    inline void end_words(void);
    inline void use_menu(void);
    inline int rejudge_out(void); 
    inline void add_student(void);
    inline void about_words(void);
    inline void quick_about(void);
    inline void slow_about(void);
    inline void debug(void);
    inline void help_words(void);
    inline void help_home(void);
    inline void help_use(void);
    inline void debug_plus(void);
    inline void query_student(void);
    inline void update_rank(void);
    inline void save_document(void);
    inline void read_document(void); 
    
    inline void start_words() {
    	clr;
    	puts("+--------------------------------------------------------------------+");
    	puts("|                                                                    |");
    	puts("|                                                                    |");
    	puts("|                   欢迎使用yizimi成绩统计程序                       |");
    	puts("|                                                                    |");
    	puts("|                                                                    |");
    	puts("|                                                                    |");
    	puts("|           1. 开始使用                   2. 关于                    |");
    	puts("|           3. 帮助                       4. 退出                    |");
    	puts("|                                                                    |"); 
    	puts("|                                                                    |");
    	puts("+--------------------------------------------------------------------+");
    }
    inline void end_words() {
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	sputs("                 欢迎您下次使用!!~QwQ~                 ");
    	nxl; nxl; nxl; nxl; nxl; 
    }
    inline void about_words() {
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     快速版?or 慢速版?");
    	puts("     1. quick!  2.slow...");
    	printf("     ");
    	int chs = getch() - '0';
    	if(chs == 1) quick_about();
    	else slow_about();
    	nxl;
    	puts("     按任意字符键返回QwQ");
    	getch(); 
    }
    inline void help_words() {
    	int chs = 0;
    	while(chs != 3) {
    		clr; nxl; nxl; nxl; nxl; nxl;
    		puts("     帮助:");
    		puts("     欢迎使用yizimiの软件");
    		puts("     1. 主页命令");
    		puts("     2. 使用界面命令");
    		puts("     3. 退出");
    		
    		chs = getch() - '0';
    		if(chs == 1) {
    			help_home();
    			continue;
    		} else if(chs == 2) {
    			help_use();
    			continue;
    		} 
    		
    	}
    }
    
    inline void quick_about() {
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     制作者:yizimi远欣");
    	puts("     监制  :yizimi远樱");
    	puts("     版本号:0.0.0.1   ");
    	puts("     latest update:2018:12:25"); 
    }
    inline void slow_about() {
    	#define puts sputs
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     制作者:yizimi远欣");
    	puts("     监制  :yizimi远樱");
    	puts("     版本号:0.0.0.1   ");
    	puts("     latest update:2018:12:25");
    	#undef puts
    }
    
    inline void help_home() {
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     主页命令:");
    	nxl;
    	puts("     '1' : 进入‘使用’界面");
    	puts("     '2' : 进入‘关于’界面");
    	puts("     '3' : 进入‘帮助’界面");
    	puts("     '4' : 进入退出界面"); 
    	nxl;
    	puts("     按任意键回到上一级");
    	getch();  
    	return ;
    }
    inline void help_use() {
    	clr; 
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     使用界面命令");
    	nxl; 
    	puts("     'I':插入/修改学生的成绩信息");
    	puts("     'Q':快速查询某编号学生的成绩");
    	puts("     'U':根据总成绩排序");
    	puts("     'N':根据原编号排序");
    	puts("     'D':删除学生信息");
    	puts("     'S':保存到存档中");
    	puts("     'R':读取存档中的成绩");
    	puts("     'H':查看指令"); 
    	nxl;
    	puts("     按任意键回到上一级");
    	getch();
    	return ; 
    }
    
    inline void update_rank() {	
    	sort(stu + 1, stu + 100000 + 1, cmp1);
    	for(int i = 1; i <= stu_cnt; i++) 
    		stu[i].rank = i;
    	sort(stu + 1, stu + 100000 + 1, cmp2);
    }
    inline void update_sort_sum() {
    	sort(stu + 1, stu + 100000 + 1, cmp1);
    } 
    inline void update_sort_num() {
    	sort(stu + 1, stu + 100000 + 1, cmp2);
    	for(int i = 1; i <= 100000; ++i)
    		stu[i].num = i;
    }
    
    inline void add_student() {
    	clr;
    	nxl; nxl; nxl; nxl; 
    	int num, _ma, _ch, _en, _cp, _ja, _py;
    	char _na[20];
    	printf("     请输入学生编号(有重复则覆盖之前的成绩)");
    	scanf("%d", &num);
    	printf("     学生姓名:");
    	scanf("%s", _na);
    	puts("     请输入各科成绩:");
    	printf("     语文:  "); 
    	scanf("%d", &_ch);
    	printf("     数学:  "); 
    	scanf("%d", &_ma);
    	printf("     英语:  "); 
    	scanf("%d", &_en);
    	printf("     C++ :  "); 
    	scanf("%d", &_cp);
    	printf("     Java:  "); 
    	scanf("%d", &_ja);
    	printf("     Python:"); 
    	scanf("%d", &_py);
    	nxl;
    	puts("     确认加入?");
    	puts("     1. 是   2. 否");
    	nxl;
    	int chs = getch() - '0';
    	if(chs == 1) {
    		if(stu[num].num == 0)
    			stu_cnt++;
    		stu[num].num = num;
    		for(int i = 0; i <= strlen(_na) - 1; ++i)
    			stu[num].name[i] = _na[i];
    		for(int i = strlen(_na); i <= 5; ++i)
    			stu[num].name[i] = 0;
    		stu[num].sc = score(_ma, _ch, _en, _cp, _py, _ja, 0);
    		stu[num].sc.get_sum();
    //		stu[num].put_info();
    		update_rank();
    	}
    	return ;
    }
    inline void query_student(int _num) {
    	system("cls");
    	nxl; nxl; nxl; nxl; nxl;
    	if(stu[_num].num != _num) 
    		puts("     查无此人QwQ……"),
    		puts("     请按任意字符键继续");
    	else {
    		puts("     编号   姓名   排名   语文   数学   英语   C++ Python   Java   总分");
    		stu[_num].put_info();
    		puts("     请按任意字符键继续");
    	} 
    	getch();
    	return ;
    }
    inline void del_student(int _num) {
    	stu[_num] = student();
    	stu[_num].rank = 0;
    	stu[_num].num = 0;
    	for(int i = 0; i <= 5; ++i) {
    		stu[_num].name[i] = 0;
    	}
    	stu[_num].sc = score();
    	stu_cnt--;
    	update_rank();
    }
    
    inline void save_document() {
    	fstream f("data.txt", ios::out);
    	f << stu_cnt << "
    ";
    	for(int i = 1; i <= 100000; ++i) {
    		if(stu[i].num == i) {
    			f << stu[i].num << " ";
    			for(int j = 0; j <= 5; j++) {
    				if(stu[i].name[j] == 0) f << ' ';
    				else  f << stu[i].name[j];
    			}
    			f << " " << stu[i].rank << " " << stu[i].sc.Chinese << " " << stu[i].sc.Math;
    			f << " " << stu[i].sc.Endlish << " " << stu[i].sc.C_PlusPlus << " " << stu[i].sc.Python;
    			f << " " << stu[i].sc.Java << " " << stu[i].sc.sum << "
    ";
    //			printf("  %3d    %3d    %3d    %3d    %3d    %3d    %3d    %4d
    ", rank, sc.Chinese,
    //				sc.Math, sc.Endlish, sc.C_PlusPlus, sc.Python, sc.Java, sc.sum);
    		}
    	}
    	f.close();
    }
    inline void read_document() {
    	freopen("data.txt", "r", stdin);
    	cin >> stu_cnt;
    	for(int i = 1; i <= stu_cnt; ++i) {
    		cin >> stu[i].num;
    		getchar();
    		for(int j = 0; j <= 5; ++j)
    			stu[i].name[j] = getchar();
    		cin >> stu[i].rank >> stu[i].sc.Chinese >> stu[i].sc.Math;
    		cin >> stu[i].sc.Endlish >> stu[i].sc.C_PlusPlus >> stu[i].sc.Python;
    		cin >> stu[i].sc.Java >> stu[i].sc.sum; 
    	}
    	fclose(stdin);
    	freopen("CON", "r", stdin);
    }
    
    inline void use_menu() {
    	char choose = 0;
    	int change_page = 1;
    	bool num_sum = 0;
    //	debug_plus();
    	while(choose != 'T') {
    		if(num_sum == 0) update_sort_num();
    		else update_sort_sum();
    		clr;
    		nxl; nxl; nxl;
    		puts("     成绩单");
    		printf("     学生总数:%d, page : %d
    ", stu_cnt, change_page);
    		if(num_sum == 0) puts("     按编号排序:");
    		else puts("     按成绩排序");
    		nxl;
    		puts("      编号   姓名   排名   语文   数学   英语   C++  Python  Java    总分");
    		if(stu_cnt == 0)
    			puts("     还没有加入任何一个学生的成绩哦QAQ"); 
    		for(int i = 20 * (change_page - 1) + 1; i <= 20 * (change_page); ++i) {
    			if(stu[i].num != 0)
    				stu[i].put_info();
    		}
    		nxl; 
    		printf("     page : %d
    ", change_page);
    		nxl; nxl;
    		choose = getch();
    		if(choose == 'C') {
    			puts("     跳转:跳到哪页呢?
    ");
    			int _get_page;
    			scanf("%d", &_get_page);
    			change_page = _get_page;
    			continue;
    		} else if(choose == 'I') {
    			add_student();
    			continue;
    		} else if(choose == 'Q') {
    			int query_num = 0;
    			puts("     查询:(请输入学生编号)");
    			printf("     ");
    			scanf("%d", &query_num);
    			query_student(query_num);
    			continue;
    		} else if(choose == 'U') {
    			update_sort_sum();
    			num_sum = 1;
    			continue;
    		} else if(choose == 'N') {
    			update_sort_num();
    			num_sum = 0;
    			continue;
    		} else if(choose == 'D') {
    			nxl;
    			puts("     请问要删除哪位学生的信息?(输入学生编号)");
    			puts("     注意!删除后其原编号以后的学生,编号都将会有改动!");
    			printf("     ");
    			int query_num = 0;
    			scanf("%d", &query_num);
    			if(stu[query_num].num == query_num)
    				del_student(query_num);
    			continue;
    		} else if(choose == 'S') {
    			nxl; nxl;
    			puts("     是否保存?(将会覆盖历史版本)");
    			puts("     1. 是的QwQ    2. 算了QAQ");
    			char chs = getch();
    			if(chs == '1') {
    				save_document();
    			}
    			continue;
    		} else if(choose == 'R') {
    			nxl; nxl;
    			puts("     是否读档?");
    			puts("     1. 是的QwQ    2. 算了QAQ");
    			char chs = getch();
    			if(chs == '1') {
    				read_document();
    			}
    			continue;
    		} else if(choose == 'H') {
    			help_use();
    			continue;
    		}
    	}
    }
    
    inline int rejudge_out() {
    	clr;
    	nxl; nxl; nxl; nxl; nxl;
    	puts("     确定要抛弃我喵QAQ?");
    	puts("     1. 狠心放弃");
    	puts("     2. 我再想想");
    	nxl; nxl; nxl;
    	int chose = getch() - '0';
    	if(chose == 1) 
    		return 4;
    	else return 0;
    }
    
    inline void menu() {
    	int choose = 0;
    	while(choose != 4) {
    		choose = 0;
    		start_words();
    		choose = getch() - '0';
    		switch (choose) {
    			case 1 :
    				use_menu();
    				break;
    			case 2 : 
    				about_words(); 
    				break;
    			case 3 : 
    				help_words();
    				break;
    			case 4 :
    				choose = rejudge_out();
    				break;
    			default :
    				break; 
    		}
    	}
    	end_words();
    }
    
    inline void debug() {
    //	srand((unsigned)time(NULL));
    //	debug_plus();
    //	save_document();
    	read_document();
    }
    inline void debug_plus() {
    	for(int i = 1; i <= 1000; i++) {
    		stu_cnt++;
    		for(int j = 0; j <= 3; j++) {
    			stu[i].name[j] = rand() % 26 + 'a';
    		}
    		stu[i].num = i;
    		stu[i].sc = score(rand() % 100, rand() % 100, rand() % 100, rand() % 100, rand() % 100, rand() % 100, 0);
    		stu[i].sc.get_sum();
    	}
    	update_rank();
    }
    
    int main () {
    	debug();
    	menu();
    	int _ = 0;
    	return ~~(0^_^0); 
    }
  • 相关阅读:
    int、bigint、smallint 和 tinyint
    我的fedora9安装后配置
    系统引导设置与管理EasyBCD与VistaBootPRO
    从Xml文档内部引用Xml Schema验证
    linux开机顺序
    OS引导-笔记
    Logic Volume笔记
    Service笔记
    python中若类属性与实例属性同名
    解析JavaScript中的null与undefined
  • 原文地址:https://www.cnblogs.com/yizimi/p/10193597.html
Copyright © 2011-2022 走看看