24-暑假软件工程日报(7_7)

news/2024/10/6 1:04:53/文章来源:https://www.cnblogs.com/kuandong24/p/18288486

工作时间:7月7日 14:00-17:00 

 工作内容:

基本完成第二阶段大程序构建

代码:

#include <cstring>
#include <iostream>
#include <list>
#include <math.h>
#include <queue>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <windows.h>
#define Max 10
using namespace std;
int num;            // 总共上课的门数
string store[4][5]; // 用来存储
float flag[5][5];   // 用来储存单双周的情况
char major[20];
char username[10];
int number;
struct project
{int pri;          // 确定优先级char name[60];    // 课程名称char teacher[10]; // 任课老师名字int data[2];      // 课程的特殊需求string code;      // 课程代号int period;       // 课程学时int count;        // 一周上课次数int odd_even;     // 是否有单双周bool operator==(project p){if (p.code == code)return true;return false;}
};
list<project> l;bool cmp(const project &p1, const project &p2)
{if (p2.pri < p1.pri)return true;return false;
}/// 储存课表
void Store()
{FILE *fpt;fpt = fopen("课表.txt", "w");fprintf(fpt, "|-----------------------------------------------------------------------------|\n");fprintf(fpt, "|                                                                             |\n");fprintf(fpt, "|                               %s课表                                   |\n", major);fprintf(fpt, "|                                                                             |\n");fprintf(fpt, "|-----------------------------------------------------------------------------|\n");for (int s = 0; s < 2; s++){if (s == 0){fprintf(fpt, "\t\t\t\t\t   *单周*");fprintf(fpt, "                                                                  \n");fprintf(fpt, "\t第一节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "\t第二节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "\t第三节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "\t第四节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "\n\n");fprintf(fpt, "-----------------------------------------------------------------------------");fprintf(fpt, "\n\n");for (int i = 0; i < 5; i++){bool tmp = true;switch (i){case 0:{fprintf(fpt, "周一\t");}break;case 1:{fprintf(fpt, "周二\t");}break;case 2:{fprintf(fpt, "周三\t");}break;case 3:{fprintf(fpt, "周四\t");}break;case 4:{fprintf(fpt, "周五\t");}break;}for (int j = 1; j < 5 && tmp; j++){if (flag[j][i] == 1){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);fprintf(fpt, "%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}else if (flag[j][i] == 4){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);fprintf(fpt, "%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}else if (flag[j][i] == 3){string code1, code2;int len = store[j - 1][i].length();int k = 0;while (store[j - 1][i][k] != '&'){code1 += store[j - 1][i][k];k++;}k++;for (; k < len; k++){code2 += store[j - 1][i][k];}list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == code1){fprintf(fpt, "%s", it->name);if (it->odd_even == 1){int name_len = strlen(it->name);if (name_len + 4 < Max){for (int i = 0; i < Max - name_len - 4; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}}it++;}}else{for (int i = 0; i < Max; i++)fprintf(fpt, " ");fprintf(fpt, "        ");}}fprintf(fpt, "\n\n");}fprintf(fpt, "------------------------------------------------------------------------------\n");}else{fprintf(fpt, "\t\t\t\t   *双周*");fprintf(fpt, "                                                                  \n");fprintf(fpt, "\t第一节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "第二节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "第三节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "        ");fprintf(fpt, "第四节");for (int i = 0; i < Max - 6; i++)fprintf(fpt, " ");fprintf(fpt, "\n\n");fprintf(fpt, "-----------------------------------------------------------------------------");fprintf(fpt, "\n\n");for (int i = 0; i < 5; i++){bool tmp = true;switch (i){case 0:{fprintf(fpt, "周一\t");}break;case 1:{fprintf(fpt, "周二\t");}break;case 2:{fprintf(fpt, "周三\t");}break;case 3:{fprintf(fpt, "周四\t");}break;case 4:{fprintf(fpt, "周五\t");}break;}for (int j = 1; j < 5 && tmp; j++){if (flag[j][i] == 2){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);fprintf(fpt, "%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}else if (flag[j][i] == 4){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);fprintf(fpt, "%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}else if (flag[j][i] == 3){string code1, code2;int len = store[j - 1][i].length();int k = 0;while (store[j - 1][i][k] != '&'){code1 += store[j - 1][i][k];k++;}k++;for (; k < len; k++){code2 += store[j - 1][i][k];}list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == code2){fprintf(fpt, "%s", it->name);if (it->odd_even == 1){int name_len = strlen(it->name);if (name_len + 4 < Max){for (int i = 0; i < Max - name_len - 4; i++)fprintf(fpt, " ");}fprintf(fpt, "        ");}}it++;}}else{for (int i = 0; i < Max; i++)fprintf(fpt, " ");fprintf(fpt, "        ");}}fprintf(fpt, "\n\n");}fprintf(fpt, "------------------------------------------------------------------------------\n");}}fclose(fpt);
}/// 向课程储存文件中排课
void SetSchedule(project *it)
{if ((it->data[0] && (it->data[1] > 10)) || ((it->period == 96 || it->period == 80) && it->data[1] > 10)) // 给确定了哪天而又确定哪一节
    {if (it->period == 96 || it->period == 80){int day = 1;int fday = 2 * (rand() % 3) + 1;while (true && day != 7){int lesson = ((it->data[1]) / 10 + 1) / 2;if (flag[0][day - 1] != 4){/// 必须可以安排flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;day += 2;}if (day == fday && it->period == 80){flag[lesson][day - 1] = it->odd_even;flag[0][day - 1] -= (it->odd_even == 1) ? 0.8 : 0.2;}}}else{while (true){int lesson = ((it->data[1]) / 10 + 1) / 2;int day = it->data[0];if (flag[0][day - 1] != 4){/// 如果可以安排if (flag[lesson][day - 1] == 0){if (!it->odd_even){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;}else{flag[lesson][day - 1] = it->odd_even;store[lesson - 1][day - 1] = it->code;flag[0][day - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}break;}/// 如果已经安排了单双周都上的课程else if (flag[lesson][day - 1] == 4 || flag[lesson][day - 1] == 3){printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}/// 如果安排了双周上课else if (flag[lesson][day - 1] == 2){if (it->odd_even == 2 || !it->odd_even){printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}else{flag[lesson][day - 1] += 1;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] += it->code;flag[0][day - 1] += 0.2;break;}}/// 如果安排了单周上课else{if (it->odd_even == 1 || !it->odd_even){printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}else{flag[lesson][day - 1] += 2;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] += it->code;flag[0][day - 1] += 0.8;break;}}}else{printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}}}} /// 指定了哪一天的哪一节课/// 给确定了哪天并指定了上午或者下午else if ((it->data[0] && (it->data[1] > 0)) || ((it->period == 96 || it->period == 80) && it->data[1] > 0)){if (it->period == 96 || it->period == 80){int day = 1;int fday = 2 * (rand() % 3) + 1;while (true && day != 7){int lesson = 2 * (it->data[1]) - 1;lesson += rand() % 2;if (flag[0][day - 1] != 4 && (day == 1 || day == 3 || day == 5)){/// 如果可以安排if (flag[lesson][day - 1] == 0){if (!it->odd_even){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;day += 2;}}if (day == fday && it->period == 80){flag[lesson][day - 1] = it->odd_even;flag[0][day - 1] -= (it->odd_even == 1) ? 0.8 : 0.2;}} /// if} /// while
        }else{while (true){int lesson = 2 * (it->data[1]) - 1;lesson += (rand() % 5) % 5;int day = it->data[0];if (flag[0][day - 1] != 4){/// 如果可以安排if (flag[lesson][day - 1] == 0){if (!it->odd_even){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;}else if (it->odd_even == 2){flag[lesson][day - 1] = 2;store[lesson - 1][day - 1] = it->code;flag[0][day - 1] += 0.8;}else{flag[lesson][day - 1] = 1;store[lesson - 1][day - 1] = it->code;flag[0][day - 1] += 0.2;}break;}/// 如果上午已经安排了单双周都上的课程else if ((flag[lesson][day - 1] == 4 || flag[lesson][day - 1] == 3) && (flag[lesson + 1][day - 1] == 4 || flag[lesson + 1][day - 1] == 3)){printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}/// 再看第一节是否符合要求else if (flag[lesson][day - 1] == 2 && it->odd_even == 1){flag[lesson][day - 1] += 1;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] += it->code;flag[0][day - 1] += 0.2;break;}/// 再看第一节课else if (flag[lesson][day - 1] == 1 && it->odd_even == 2){flag[lesson][day - 1] += 2;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] += it->code;flag[0][day - 1] += 0.8;break;}/// 再看第二节else if (flag[lesson + 1][day - 1] == 2 && it->odd_even == 1){flag[lesson + 1][day - 1] += 1;store[lesson][day - 1] += '&';store[lesson][day - 1] += it->code;flag[0][day - 1] += 0.2;break;}/// 再看第二节课else if (flag[lesson + 1][day - 1] == 1 && it->odd_even == 2){flag[lesson + 1][day - 1] += 2;store[lesson][day - 1] += '&';store[lesson][day - 1] += it->code;flag[0][day - 1] += 0.8;break;}else{printf("您对%s要求的安排与其他课程有冲突,请重新输入:", it->name);printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午  2.仅要求下午]\n");scanf("%d%d", &it->data[0], &it->data[1]);}} /// 是否少于四节课} /// 是否安排好课程
        }} /// 指定了哪一天的上午或者下午/// 仅指定了哪一天,肯定能安排上else if ((it->data[0] && !it->data[1]) || it->period == 96 || it->period == 80){/// 一周三节课if (it->period == 96 || it->period == 80){int day = 1;while (true){int lesson = (rand() % 4) + 1;/// 如果可以排课if (flag[lesson][day - 1] == 0){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;if (day != 5)day += 2;else if (day == 5 && it->period == 80){flag[lesson][day - 1] = it->odd_even;break;}elsebreak;}elsecontinue;}}/// 一周一节课else{int day = it->data[0];while (true){int lesson = (rand() % 4) + 1;/// 如果可以排课if (flag[lesson][day - 1] == 0){if (it->odd_even == 0){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;}else if (it->odd_even == 1){flag[lesson][day - 1] += 1;store[lesson - 1][day - 1] = it->code;flag[0][day - 1] += 0.2;}else{flag[lesson][day - 1] += 2;store[lesson - 1][day - 1] = it->code;flag[0][day - 1] += 0.8;}break;}else if (it->odd_even == 1 && flag[lesson][day - 1] == 2){flag[lesson][day - 1] += 1;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] = it->code;flag[0][day - 1] += 0.2;break;}else if (it->odd_even == 2 && flag[lesson][day - 1] == 1){flag[lesson][day - 1] += 2;store[lesson - 1][day - 1] += '&';store[lesson - 1][day - 1] += it->code;flag[0][day - 1] += 0.8;break;}elsecontinue;}}} /// 仅仅指定了哪一天/// 仅仅指定了哪一节else if (!it->data[0] && it->data[1] > 10){int lesson = (it->data[1] / 10 + 1) / 2;int day1, day2;if (it->period == 64 || it->period == 48){while (true){day1 = (rand() % 5) + 1;day2 = (rand() % 5) + 1;if (fabs(day1 - day2) > 1){if (flag[lesson][day1 - 1] == 0 && flag[lesson][day2 - 1] == 0){flag[lesson][day1 - 1] = 4;flag[lesson][day2 - 1] = 4;store[lesson - 1][day1 - 1] = it->code;store[lesson - 1][day2 - 1] = it->code;flag[0][day1 - 1]++;flag[0][day2 - 1]++;break;}}}if (it->period == 48){int sele = (rand() % 2);if (sele){flag[lesson][day1 - 1] = it->odd_even;flag[0][day1 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}else{flag[lesson][day2 - 1] = it->odd_even;flag[0][day2 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}}else{int day;while (true){day = (rand() % 5) + 1;if (flag[lesson][day - 1] == 0){flag[lesson][day - 1] = 4;store[lesson - 1][day - 1] = it->code;flag[0][day - 1]++;break;}}if (it->period == 16){flag[lesson - 1][day - 1] = it->odd_even;flag[0][day - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}} /// 仅仅指定了哪一节课/// 仅仅指定了是上午还是下午else if (!it->data[0] && it->data[1] > 0){int lesson1, lesson2;int day1, day2;if (it->period == 64 || it->period == 48){int lesson = 2 * (it->data[1]) - 1;while (true){day1 = (rand() % 5) + 1;day2 = (rand() % 5) + 1;lesson1 = (rand() % 4) + 1;lesson2 = (rand() % 4) + 1;if (fabs(day1 - day2) > 1 && (lesson1 == lesson || lesson1 == lesson + 1) && (lesson2 == lesson || lesson2 == lesson + 1)){if (flag[lesson1][day1 - 1] == 0 && flag[lesson2][day2 - 1] == 0){flag[lesson1][day1 - 1] = 4;flag[lesson2][day2 - 1] = 4;store[lesson1 - 1][day1 - 1] = it->code;store[lesson2 - 1][day2 - 1] = it->code;flag[0][day1 - 1]++;flag[0][day2 - 1]++;break;}}}if (it->period == 48){int sele = (rand() % 2);if (sele){flag[lesson1][day1 - 1] = it->odd_even;flag[0][day1 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}else{flag[lesson2][day2 - 1] = it->odd_even;flag[0][day2 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}}else{int lesson = 2 * (it->data[1]) - 1;while (true){day1 = (rand() % 5) + 1;lesson1 = (rand() % 4) + 1;if (flag[lesson1][day1 - 1] == 0 && (lesson1 == lesson || lesson1 == lesson + 1)){flag[lesson1][day1 - 1] = 4;store[lesson1 - 1][day1 - 1] = it->code;flag[0][day1 - 1]++;break;}}if (it->period == 16){flag[lesson1 - 1][day1 - 1] = it->odd_even;flag[0][day1 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}} /// 仅仅指定了上午还是下午/// 什么都没指定else{int lesson1, lesson2;int day1, day2;if (it->period == 64 || it->period == 48){while (true){day1 = (rand() % 5) + 1;day2 = (rand() % 5) + 1;lesson1 = (rand() % 4) + 1;lesson2 = (rand() % 4) + 1;if (fabs(day1 - day2) > 1){if (flag[lesson1][day1 - 1] == 0 && flag[lesson2][day2 - 1] == 0){flag[lesson1][day1 - 1] = 4;flag[lesson2][day2 - 1] = 4;store[lesson1 - 1][day1 - 1] = it->code;store[lesson2 - 1][day2 - 1] = it->code;flag[0][day1 - 1]++;flag[0][day2 - 1]++;break;}}}if (it->period == 48){int sele = (rand() % 2);if (sele){flag[lesson1][day1 - 1] = it->odd_even;flag[0][day1 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}else{flag[lesson2][day2 - 1] = it->odd_even;flag[0][day2 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}}else{while (true){day1 = (rand() % 5) + 1;lesson1 = (rand() % 4) + 1;if (flag[lesson1][day1 - 1] == 0){flag[lesson1][day1 - 1] = 4;store[lesson1 - 1][day1 - 1] = it->code;flag[0][day1 - 1]++;break;}}if (it->period == 16){flag[lesson1 - 1][day1 - 1] = it->odd_even;flag[0][day1 - 1] -= (it->odd_even == 1 ? 0.8 : 0.2);}}}
}/// 新建一个课表
void CreateSchedule()
{printf("-----------------------------欢迎进入创建课程系统-----------------------------\n");l.clear();memset(flag, 0, sizeof(flag)); // 初始化状态现在还没有存任何的信息flag[3][1] = 4;flag[4][1] = 4;printf("请输入专业名称:");scanf("%s", major);printf("请输入%s专业本学期的课程总数:", major);scanf("%d", &num);for (int i = 0; i < num; i++){project p;p.pri = 0;printf("\n-----------------现在将添加第%d个课程-----------------\n", i + 1);int Sel = 1;while (Sel){printf("请输入该课程的代号:");cin >> p.code;printf("请输入该课程的名称:");scanf("%s", p.name);printf("请输入该课程的任课老师:");scanf("%s", p.teacher);printf("请输入该课程的学时(注:16的奇数倍有单双周之分):");scanf("%d", &p.period);p.pri += (p.period / 16);       // 优先级相加p.count = (p.period + 16) / 32; // 一周上多少节课,不分单双周// 单双周if ((p.period / 32) == (p.period - 16) / 32){int select;printf("您所要创建的课程需要有单双周安排,是否自己确定?\n");printf("请输入您的选择[1.自己确定 2.随机确定]:");scanf("%d", &select);while (select != 1 && select != 2){printf("输入有误,请重新输入:");scanf("%d", &select);}switch (select){case 1: // 自己设定单双周
                {printf("请输入您的选择的代号[1.单周 2.双周]:");scanf("%d", &p.odd_even);}break;case 2: // 随机生成单双周
                {srand(time(NULL));p.odd_even = (rand() % 2) + 1;}break;}}else{p.odd_even = 0; // 单双周都要上课
            }// 特殊要求int option;printf("对上课时间有没有什么特殊要求?\n");printf("请输入您的选择[1.指定时间段上课  2.没有要求]:");scanf("%d", &option);while (option != 1 && option != 2){printf("输入有误,请重新输入:");scanf("%d", &option);}p.data[0] = 0;p.data[1] = 0;if (option == 1){printf("输入格式:星期 上课时间[0.无特殊要求  1.仅要求上午   2.仅要求下午]\n");printf("例如指定第一二节而未指定哪天,输入0 12\n");printf("请输入指定时间:");scanf("%d%d", &p.data[0], &p.data[1]);if (p.data[0] && (p.data[1] > 10)) // 指定了哪一天的哪一节
                {p.pri += 15;}else if (p.data[0] && p.data[1]) // 指定了哪一天的上午或者下午
                {p.pri += 14;}else if ((p.data[0] && !p.data[1]) || (p.period == 96) || (p.period == 80)) // 指定了哪一天
                {p.pri += 13;}else if (!p.data[0] && p.data[1] > 10) // 未指定哪一天但指定了哪一节
                {p.pri += 10;}else if (!p.data[0] && p.data[1]) // 未指定哪一天但指定了上午还是下午
                {p.pri += 9;}}printf("请确定输入信息无误并且无重复课程[1.重新输入   0.继续]:");scanf("%d", &Sel);}l.push_back(p);}l.sort(cmp);while (true){printf("\n--------------接下来输出将要排课的先后顺序--------------\n");list<project>::iterator it;for (it = l.begin(); it != l.end(); it++){printf("%s", it->name);printf("\n");}printf("是否同意排课顺序?\n");printf("[1.同意  0.不同意]:");int opt;scanf("%d", &opt);if (!opt){printf("\n请输入需要调整的两个课程的代号(两个代号之间用空格隔开):\n");while (true){string code1, code2;bool flg1 = false, flg2 = false;cin >> code1 >> code2;list<project>::iterator it1;list<project>::iterator it2;list<project>::iterator it3;for (it3 = l.begin(); it3 != l.end(); it3++){if (it3->code == code1){it1 = it3;flg1 = true;}else if (it3->code == code2){it2 = it3;flg2 = true;}}if (flg2 && flg1){l.insert(it1, *it2);l.insert(it2, *it1);l.erase(it1);l.erase(it2);break;}else{printf("请输入正确的代号:");cin >> code1 >> code2;}}}else{break;}}system("pause");system("cls"); // 清屏printf("-------------现在将进行随机进行排课-----------\n");list<project>::iterator it;for (it = l.begin(); it != l.end(); it++){project ir;ir = *it;SetSchedule(&ir);printf("%s已排好.\n", it->name);system("pause");}printf("-------------------排课完成!------------------\n");system("pause");
}/// 打印课表
void Print()
{for (int s = 0; s < 2; s++){if (s == 0){printf("\t\t\t\t   *单周*");printf("                                                                  \n");printf("\t第一节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第二节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第三节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第四节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("\n\n");printf("-----------------------------------------------------------------------------");printf("\n\n");for (int i = 0; i < 5; i++){bool tmp = true;switch (i){case 0:{printf("周一\t");}break;case 1:{printf("周二\t");}break;case 2:{printf("周三\t");}break;case 3:{printf("周四\t");}break;case 4:{printf("周五\t");}break;}for (int j = 1; j < 5 && tmp; j++){if (flag[j][i] == 1){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);printf("%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)printf(" ");}printf("        ");}else if (flag[j][i] == 4){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);printf("%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)printf(" ");}printf("        ");}else if (flag[j][i] == 3){string code1, code2;int len = store[j - 1][i].length();int k = 0;while (store[j - 1][i][k] != '&'){code1 += store[j - 1][i][k];k++;}k++;for (; k < len; k++){code2 += store[j - 1][i][k];}list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == code1){printf("%s", it->name);if (it->odd_even == 1){int name_len = strlen(it->name);if (name_len + 4 < Max){for (int i = 0; i < Max - name_len - 4; i++)printf(" ");}printf("        ");}}it++;}}else{for (int i = 0; i < Max; i++)printf(" ");printf("        ");}}printf("\n\n");}printf("------------------------------------------------------------------------------\n");}else{printf("\t\t\t\t   *双周*");printf("                                                                  \n");printf("\t第一节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第二节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第三节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("        ");printf("第四节");for (int i = 0; i < Max - 6; i++)printf(" ");printf("\n\n");printf("-----------------------------------------------------------------------------");printf("\n\n");for (int i = 0; i < 5; i++){bool tmp = true;switch (i){case 0:{printf("周一\t");}break;case 1:{printf("周二\t");}break;case 2:{printf("周三\t");}break;case 3:{printf("周四\t");}break;case 4:{printf("周五\t");}break;}for (int j = 1; j < 5 && tmp; j++){if (flag[j][i] == 2){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);printf("%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)printf(" ");}printf("        ");}else if (flag[j][i] == 4){list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == store[j - 1][i])break;elseit++;}int name_len = strlen(it->name);printf("%s", it->name);if (name_len < Max){for (int i = 0; i < Max - name_len; i++)printf(" ");}printf("        ");}else if (flag[j][i] == 3){string code1, code2;int len = store[j - 1][i].length();int k = 0;while (store[j - 1][i][k] != '&'){code1 += store[j - 1][i][k];k++;}k++;for (; k < len; k++){code2 += store[j - 1][i][k];}list<project>::iterator it;it = l.begin();while (it != l.end()){if (it->code == code2){printf("%s", it->name);if (it->odd_even == 1){int name_len = strlen(it->name);if (name_len + 4 < Max){for (int i = 0; i < Max - name_len - 4; i++)printf(" ");}printf("        ");}}it++;}}else{for (int i = 0; i < Max; i++)printf(" ");printf("        ");}}printf("\n\n");}printf("------------------------------------------------------------------------------\n");}}
}
/// 修改课程表
void ReviseProject()
{printf("********************课表修改菜单*****************************\n");printf("*******************1.删除课程************************************\n");printf("*******************2.添加课程************************************\n");int opv, pc; // 判断输入字符的printf("请输入您要进行的操作的代号:");scanf("%d", &opv);while (opv != 1 && opv != 2){printf("您输入有误请重新输入您的选择:");scanf("%d", &opv);}if (opv == 1){string code1, code2, code3;int i, j, jk[3], t[3], s = 1, le; // k是课,t是天,s是一共几节课,le是记录要删除第几节printf("请输入要删除的课程的代码:(必须是已经存在的课程的代号)");list<project>::iterator it;while (true){cin >> code1;bool tag = false;it = l.begin();while (it != l.end()){if (it->code == code1){tag = true;break;}elseit++;}if (!tag){printf("没有这门课,请重新输入课程代号:\n");}elsebreak;}printf("这门课在  ");for (j = 0; j < 5; j++)for (i = 0; i < 4; i++){if (flag[i + 1][j] == 4){if (store[i][j] == code1){printf("周%d第%d%d节  ", j + 1, i * 2 + 1, i * 2 + 2);jk[s] = i;t[s] = j;s++;}}else if (flag[i + 1][j] == 1){if (store[i][j] == code1){printf("周%d第%d%d节(单)  ", j + 1, i * 2 + 1, i * 2 + 2);jk[s] = i;t[s] = j;s++;}}else if (flag[i + 1][j] == 2){if (store[i][j] == code1){printf("周%d第%d%d节(双)  ", j + 1, i * 2 + 1, i * 2 + 2);jk[s] = i;t[s] = j;s++;}}else if (flag[i + 1][j] == 3){int len = store[i][j].length(), k = 0;while (store[i][j][k] != '&'){code2 += store[i][j][k];k++;}k++;while (k < len){code3 += store[i][j][k];k++;}if (code3 == code1){if (it->odd_even == 1)printf("周%d第%d%d节(单)  ", j + 1, i * 2 + 1, i * 2 + 2);else if (it->odd_even == 2)printf("周%d第%d%d节(双)  ", j + 1, i * 2 + 1, i * 2 + 2);jk[s] = i;t[s] = j;s++;}else if (code2 == code1){if (it->odd_even == 1)printf("周%d第%d%d节(单)  ", j + 1, i * 2 + 1, i * 2 + 2);else if (it->odd_even == 2)printf("周%d第%d%d节(双)  ", j + 1, i * 2 + 1, i * 2 + 2);jk[s] = i;t[s] = j;s++;}}}printf("有课。\n   要删除第几节?");scanf("%d", &le);s--;while (le > s || le <= 0){printf("输入错,请重新输入!");scanf("%d", &le);}printf("是否确认删除? 确认1 取消0 : ");scanf("%d", &pc);while (pc != 1 && pc != 0){printf("您输入有误请重新输入您的选择:");scanf("%d", &pc);}if (pc == 1){if (flag[jk[le] + 1][t[le]] != 3){store[jk[le]][t[le]] = "";flag[jk[le] + 1][t[le]] = 0;if (flag[jk[le] + 1][t[le]] == 2 || flag[jk[le] + 1][t[le]] == 1){it->period -= 16;it->odd_even = 0;}elseit->period -= 32;printf("*********删除成功!**********\n");}else{if (code3 == code1){store[jk[le]][t[le]] = code2;if (it->odd_even == 1){flag[jk[le] + 1][t[le]] = 2;it->odd_even = 0;it->period -= 16;}else if (it->odd_even == 2){flag[jk[le] + 1][t[le]] = 1;it->odd_even = 0;it->period -= 16;}printf("*********删除成功!**********\n");}else if (code2 == code1){store[jk[le]][t[le]] = code3;if (it->odd_even == 1){flag[jk[le] + 1][t[le]] = 2;it->odd_even = 0;it->period -= 16;}else if (it->odd_even == 2){flag[jk[le] + 1][t[le]] = 1;it->odd_even = 0;it->period -= 16;}printf("*********删除成功!**********\n");}}}elseprintf("已经取消\n");}else if (opv == 2){printf("请选择要 增加一门课程并随机安排:1 还是将已存在的课程添加一节到固定的时间:2\n");int buew;project p;string code1; // 用于判断选择scanf("%d", &buew);if (buew == 1){p.pri = 0;printf("\n***********现在您将对%s专业添加课程***********\n", major);int Sel = 1;while (Sel){printf("请输入该课程的代号:");cin >> p.code;printf("请输入该课程的名称:");scanf("%s", p.name);printf("请输入该课程的任课老师:");scanf("%s", p.teacher);printf("请输入该课程的学时:");scanf("%d", &p.period);p.pri += (p.period / 16);       // 优先级相加p.count = (p.period + 16) / 32; // 一周上多少节课,不分单双周// 单双周if ((p.period / 32) == (p.period - 16) / 32){int select;printf("您所要创建的课程需要有单双周安排,是否自己确定\n");printf("请输入您的选择(1代表自己确定,2代表随机确定):");scanf("%d", &select);while (select != 1 && select != 2){printf("您输入有误请重新输入您的选择:");scanf("%d", &select);}switch (select){case 1: // 自己设定单双周
                    {printf("请输入您的选择的代号(1代表单周,2代表双周):");scanf("%d", &p.odd_even);}case 2: // 随机生成单双周
                    {srand(time(NULL));p.odd_even = (rand() % 2) + 1;}}}else{p.odd_even = 0; // 单双周都要上课
                }// 特殊要求int option;printf("请问您对上课时间有没有什么特殊要求?\n");printf("请输入您的选择(1代表指定时间段上课,2代表您没有要求):");scanf("%d", &option);while (option != 1 && option != 2){printf("您输入有误请重新输入您的选择:");scanf("%d", &option);}p.data[0] = 0;p.data[1] = 0;if (option == 1){printf("请输入您的指定时间(先输入周几,再输入第几节课,若无特殊要求选择0,中间用空格隔开,如果仅要求上午则用1表示,下午则用2表示)\n");printf("例如指定第一二节而未指定哪天,输入0 12(请不要指定周二下午的课程)\n");printf("请输入您的要求:");scanf("%d%d", &p.data[0], &p.data[1]);if (p.data[0] && (p.data[1] > 10)) // 指定了哪一天的哪一节
                    {p.pri += 15;}else if (p.data[0] && p.data[1]) // 指定了哪一天的上午或者下午
                    {p.pri += 14;}else if ((p.data[0] && !p.data[1]) || (p.period == 96)) // 指定了哪一天
                    {p.pri += 10;}else if (!p.data[0] && p.data[1] > 10) // 未指定哪一天但指定了哪一节
                    {p.pri += 9;}else if (!p.data[0] && p.data[1]) // 未指定哪一天但指定了上午还是下午
                    {p.pri += 8;}}printf("确定输入信息无误并且无重复性课?如若要修改信息请选择1,不修改请选择0: ");scanf("%d", &Sel);}l.push_back(p);list<project>::iterator it;it = l.end();it--;project ir;ir = *it;SetSchedule(&ir);printf("现在%s已经安排好.\n", it->name);system("pause");printf("***********排课完成!!***********\n");}else if (buew == 2){int i, j, xznz; // xznt就是选择单双周printf("请输入要添加的课程的代号:\n");list<project>::iterator it;while (true){cin >> p.code;bool tag = false;it = l.begin();while (it != l.end()){if (it->code == p.code){tag = true;break;}elseit++;}if (!tag){printf("没有这门课,请重新输入课程代号:\n");}elsebreak;}printf("请输入要插入周几 哪节(格式:1 2即周一第二大节)(请不要添加课程到周二下午): \n");scanf("%d %d", &i, &j);printf("是否设置单双周(不设置:0 单周上课:1 双周上课:2):");scanf("%d", &xznz);while (xznz != 1 && xznz != 2 && xznz != 0){printf("您输入有误请重新输入您的选择:");scanf("%d", &xznz);}if (flag[j][i - 1] == 0 && xznz == 0){store[j - 1][i - 1] = p.code;flag[j][i - 1] = 4;it->period += 32;printf("******插入成功!******\n");}else if (flag[j][i - 1] == 0 && xznz == 1){store[j - 1][i - 1] = p.code;flag[j][i - 1] = 1;it->odd_even = 1;it->period += 16;printf("******插入成功!******\n");}else if (flag[j][i - 1] == 0 && xznz == 2){store[j - 1][i - 1] = p.code;flag[j][i - 1] = 2;it->odd_even = 2;it->period += 16;printf("******插入成功!******\n");}else if (flag[j][i - 1] == 1 && xznz == 2){code1 = store[j - 1][i - 1];store[j - 1][i - 1] = p.code;store[j - 1][i - 1] += '&';store[j - 1][i - 1] += code1;flag[j][i - 1] = 3;it->odd_even = 2;it->period += 16;printf("******插入成功!******\n");}else if (flag[j][i - 1] == 2 && xznz == 1){code1 = store[j - 1][i - 1];store[j - 1][i - 1] = p.code;store[j - 1][i - 1] += '&';store[j - 1][i - 1] += code1;flag[j][i - 1] = 3;it->odd_even = 1;it->period += 16;printf("******插入成功!******\n");}elseprintf("输入错 这节有课!\n");}}system("pause");
}
/// 查询信息
void Inquiry()
{int i, j;project ccp;string code2, code3;list<project>::iterator it;it = l.begin();while (it != l.end()){printf("%s-> ", it->name);cout << it->code << "\n";it++;}printf("请输入要查询的课程的代号:");while (true){cin >> ccp.code;bool tag = false;it = l.begin();while (it != l.end()){if (it->code == ccp.code){tag = true;break;}elseit++;}if (!tag){printf("没有这门课,请重新输入\n");}elsebreak;}printf("你查询的课程是:        %s\n\n", it->name);printf("%s的授课老师是:  %s\n\n", it->name, it->teacher);printf("共有%d课时 \n\n", it->period);printf("%s在  ", it->name);for (j = 0; j < 5; j++)for (i = 0; i < 4; i++){if (flag[i + 1][j] == 4){if (store[i][j] == it->code)printf("周%d第%d%d节  ", j + 1, i * 2 + 1, i * 2 + 2);}else if (flag[i + 1][j] == 1){if (store[i][j] == it->code)printf("周%d第%d%d节(单)  ", j + 1, i * 2 + 1, i * 2 + 2);}else if (flag[i + 1][j] == 2){if (store[i][j] == it->code)printf("周%d第%d%d节(双)  ", j + 1, i * 2 + 1, i * 2 + 2);}else if (flag[i + 1][j] == 3){int len = store[i][j].length(), k = 0;while (store[i][j][k] != '&'){code2 += store[i][j][k];k++;}k++;while (k < len){code3 += store[i][j][k];k++;}if (code3 == it->code || code2 == it->code){if (it->odd_even == 1)printf("周%d第%d%d节(单)  ", j + 1, i * 2 + 1, i * 2 + 2);else if (it->odd_even == 2)printf("周%d第%d%d节(双)  ", j + 1, i * 2 + 1, i * 2 + 2);}}}printf("有课。\n\n ");system("pause");
}
/// 登录界面
void log()
{printf("|---------------------------------------------------------------------------|\n");printf("|                             欢迎登录课表创建系统                          |\n");printf("|---------------------------------------------------------------------------|\n");printf("                                       登录                                  \n");printf("\n");printf("                             姓名:");scanf("%s", username);printf("                             学工号:");scanf("%d", &number);printf("\n");
}
/// 显示主菜单
void menu()
{printf("-----------------------------------------------------------------------------\n");printf("▏                               课程表系统菜单                              ▏\n");printf("-----------------------------------------------------------------------------\n");printf("▏                                 1.新建课表                                ▏\n");printf("▏                                 2.修改课表                                ▏\n");printf("▏                                 3.保存课表                                ▏\n");printf("▏                                 4.显示课表                                ▏\n");printf("▏                                 5.查询课程                                ▏\n");printf("▏                                 0.退出                                    ▏\n");printf("-----------------------------------------------------------------------------\n");
}
int main()
{system("color F0");log();menu();int select;srand(time(NULL));printf("请输入所需操作的对应代号:");while (scanf("%d", &select) && select){while (select < 0 || select > 5){printf("输入有误,请重新输入:");scanf("%d", &select);}switch (select){// 创建课表case 1:{system("cls"); // 清理屏幕,准备写入
            CreateSchedule();system("cls"); // 清理屏幕,准备写入
        }break;// 修改课程表case 2:{system("cls"); // 清理屏幕,准备写入printf("|---------------------------------------------------------------------------|\n");printf("|                                                                           |\n");printf("|                              %s课表                                  |\n", major);printf("|                                                                           |\n");printf("|---------------------------------------------------------------------------|\n");ReviseProject();Print();printf("------------------------如您已经修改成功请选择保存--------------------------\n");}break;// 保存课程表case 3:{system("cls"); // 清理屏幕,准备写入
            Store();printf("现在课表信息已经存放在“课表.txt文件中”.");system("pause");system("cls");}break;// 输出一个课表case 4:{system("cls"); // 清理屏幕,准备写入printf("-----------------------------------------------------------------------------\n");printf("                                                                             \n");printf("                               %s课表                                  \n", major);printf("                                                                             \n");printf("-----------------------------------------------------------------------------\n");printf("                                                                             \n");printf("                  姓名:%s", username);printf("               学号:%d                 \n", number);printf("                                                                             \n");printf("-----------------------------------------------------------------------------\n");Print();system("pause");}break;case 5:{system("cls");Inquiry();}break;}system("cls"); // 清理屏幕,准备写入
        menu();printf("请输入所需操作的对应代号:");}printf("感谢您的使用!\n");system("pause");return 0;
}
View Code

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739773.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CISCN2019 华北赛区 Day2 Web1]Hack World

进入题目 输入数字1数字20对select 空格 union or 等等测试发现没有过滤select 空格也被过滤 注意不能单独测试用亦或运算 1^0为真 尝试0^if((ascii(substr((select(flag)from(flag)),1,1))=100),0,1) 回显正常根据回显判断正误 编写脚本爆破,由于该网站请求太快会报429,请求…

CubeMx的部分配置显示不出来

现象描述:CubeMx的部分配置显示不出来 处理方法:(1)继续进行其他配置,给工程起名字,并生成代码;(2)关闭CubeMx后再次打开

[CISCN2019 华东南赛区]Double Secret

进入题目由于请求不能过快,目录扫描工具失效可写脚本, 根据题目两个secret,猜测有serect目录 访问猜测还有一个secret参数随意输入发现源码泄露 注意到有flask,考虑python模板注入 注意到发现rc4加密 找师傅的加密脚本 import base64 from urllib.parse import quote def rc4…

[CISCN2019 华东南赛区]Web11

进入题目注意到xff 在url处随意输入目录xff随之变化 注意下放smarty是php模板 猜测xff为模板注入点 如下用if标签看到回显得到flag flag{6efda977-94fb-4d30-8668-fe28458ec2bf}

game1

进入题目发现是一个游戏发现有一个score.php的发包 发现有分数等 对比不同分数的包发现sign值都有ZM后疑似为base64于是将分数改为较高的分,ZM+base64 尝试要补一个=得到flag

[CISCN 2019 初赛]Love Math

进入题目,直接源码 代码审计、看师傅wp有黑名单字符过滤,有白名单函数过滤 于是用编码绕过,利用eval函数执行命令,system(cat /flag.txt) base_convert(a,b,c) //将数值a按b进制转换为c进制 dechex //将10进制转成16进制 hex2bin() //16进制转成字符串 base_convert(37907…

babyweb国赛华东北

进入题目目录扫描 扫出ssrf.php 发现url尝试用file协议访问/flag.txt拿到flag

人脸识别签到系统一站式开发【基于Pyqt5的CS架构软件】

人脸识别签到系统:课堂签到,上班打卡,进出门身份验证。 功能:人脸录入,打卡签到,声音提醒,打卡信息导出,打包exe文件人脸识别签到系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能架构 人脸录入,打卡签到,声音提醒,打卡信息导出:3、技术栈 python3.8…

本地管理员

进入题目 随意输入密码发现提示ip,则尝试xff伪造ip右键检查发现base64编码 解码得猜测为用户admin密码 抓包发包得到flag

rust学习-记录第一个完成的rust算法题

给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 . 表示,白色格子用 W 表示,黑色格子用 B 表示。 游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,合法 操作必须满…

Grafana+Loki+Promtail 日志监控

目录前置工作用户组(按需创建)GrafanaLokiLoki 配置文件Promtail配置文件配置数据源创建仪表盘添加查询项 前置工作Centos 7 关闭防火墙 (systemctl stop firewalld) 独立的用户组(可以不创建)用户组(按需创建) # 创建用户组 groupadd grafana # 新建一个家目录为`/home/graf…

source

进入题目右键源码发现一个假的flag base64解码啥也不是 目录扫描发现.git源码泄露,假的flag.txt下载.git进入目录 查看历史版本一一查看各个版本改动找到flag