学生选课系统

完整代码在最后

1. 流程图

流程图.png

2.主函数

    int main() { //主函数
    for (int i = 1; i; i++) {
    int n;
    printf("*************欢迎使用学生选修课程系统***************\n");
    printf("\t *** 菜单 ***\n");
    printf("\t**** 1.录入课程信息 ****\n");
    printf("\t**** 2.浏览课程信息 ****\n");
    printf("\t**** 3.查询课程信息 ****\n");
    printf("\t**** 4.录入学生信息 ****\n");
    printf("\t**** 5.学生选修课程 ****\n");
    printf("\t**** 6.选修课程统计 ****\n");
    printf("\t**** 7.退出系统 ****\n");
    printf("\t**** 请输入你的选择! ****\n");
    scanf("%d", &n);
    if (n < 1 || n > 7) {
    printf("输入错误");
    scanf("%d", &n);
    } else if (n >= 1 && n < 7) {
    switch (n) {
    case 1:
    Courseinsert();
    break;
    case 2:
    Coursebrowse();
    break;
    case 3:
    Coursequery();
    break;
    case 4:
    Studentinsert();
    break;
    case 5:
    Studentcourse();
    break;
    case 6:
    Statistic();
    break;
    }
    } else {
    break;
    }
    }
    return 0;
    }

3.定义变量

3.1定义课程信息结构体和学生信息结构体

学生、课程er图

定义课程信息结构体:

    struct CourseInfor { //定义课程信息结构体数组 全局变量
        int coursecode; //课程编号
        char coursename[20]; //课程名称
        char coursetype[20]; //课程性质
        int totalhour; //总学时
        int classhour; //授课学时
        int exercisehour; //上机或实验学时
        float credit; //学分
        int term; //开课学期
    };

学生信息结构体:

    struct StudentInfor { //定义学生结构体数组 全局变量
        int stucode; //学号
        char stuname[20]; //学生姓名
        int selectnumber; //选择的课程数量
        int selectcode[100]; //选择课程的编号
    };
  • 定义课程信息(CourseInfo)结构体数组 数组名字叫course[] 数组大小为100 也就是course[]数组中可以存100门课程
    struct CourseInfor courses[100];

  • 定义学生信息(StudentInfo)结构体数组 数组名称叫stdus[] 数组大小为100 也就是stdus[]数组中可以存100名学生
    struct StudentInfor stus[100];

  • 定义课程数量 初始值是0 注:cnt是count的缩写 用作计数器 coursecnt就是course count的缩写 所以coursecnt意思是课程的计数
    int coursecnt = 0;

  • 定义学生数量 初始值是0 注:cnt是count的缩写 用作计数器 stucnt就是student count的缩写 所以coursecnt意思是学生的计数
    int stucnt = 0;

4.各个模块功能函数(增、删、改、查)

4.1 录入课程信息模块 Courseinsert()

void Courseinsert() { //课程信息录入
        int i;
        int cnt = 0;
        printf("请输入录入课程数量:\n");
        scanf("%d", &cnt);
        coursecnt = cnt;
        printf("请输入课程信息(格式如下:1 C语言 编程语言 30 20 10 1 1):\n");
        printf("课程编号 课程名称 课程性质 总学时 授课学时 上机学时 学分 开课学期\n");
        for (i = 0; i < cnt; i++) {
            scanf("%d", &courses[i].coursecode);
            scanf("%s", courses[i].coursename);
            scanf("%s", courses[i].coursetype);
            scanf("%d", &courses[i].totalhour);
            scanf("%d", &courses[i].classhour);
            scanf("%d", &courses[i].exercisehour);
            scanf("%f", &courses[i].credit);
            scanf("%d", &courses[i].term);
        }
        printf("数据已录入完毕\n");
    }

4.2 浏览课程信息模块 Coursebrowse()

void Coursebrowse() { //课程信息浏览
        int cnt, i;
        printf("请输入想浏览多少门课程:\n");
        scanf("%d", &cnt);
        if (cnt < 1 || cnt > coursecnt) {
            printf("输入数据错误,请重新输入!\n");
            Coursebrowse();
        } 
        else {
            for (i = 0; i < cnt; i++) 
                {
                    printf("%d %s %s %d %d %d %f %d\n",
                    courses[i].coursecode,
                    courses[i].coursename,
                    courses[i].coursetype,
                    courses[i].totalhour,
                    courses[i].classhour,
                    courses[i].exercisehour,
                    courses[i].credit,
                    courses[i].term);
                }
            printf("课程数据已经全部展示!\n");
        }
    }

4.3 查询课程信息模块 Coursequery()

    void Coursequery() { //查询课程信息
        printf("8.根据课程性质查询\n");
        printf("9.根据学分查询\n");
        printf("请输入所要查询编号\n");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
            case 8:
            char coursetype[20];
            printf("请输入课程性质\n");
            scanf("%s", coursetype);
            for (int i = 0; i < coursecnt; i++) {
            if (strcmp(coursetype, courses[i].coursetype) == 0) {
            printf("%d %s %s %d %d %d %f %d\n",
            courses[i].coursecode,
            courses[i].coursename,
            courses[i].coursetype,
            courses[i].totalhour,
            courses[i].classhour,
            courses[i].exercisehour,
            courses[i].credit,
            courses[i].term);
            }
            }
            printf("数据已全部展示\n");
            break;
        case 9:
            float credit;
            printf("请输入所要查询的课程学分\n");
            scanf("%f", &credit);
            for (int i = 0; i < coursecnt; i++) {
                if (credit == courses[i].credit) 
                    {
                        printf("%d %s %s %d %d %d %f %d\n",
                        courses[i].coursecode,
                        courses[i].coursename,
                        courses[i].coursetype,
                        courses[i].totalhour,
                        courses[i].classhour,
                        courses[i].exercisehour,
                        courses[i].credit,
                        courses[i].term);
                    }
            }
            printf("数据已经全部展示\n");
            break;
        default:
            printf("输入选项错误,请重新输入!\n");
            Coursequery();
        }
    }

4.4 录入学生信息模块 Studentinsert()

void Studentinsert() { //学生信息录入
        int cnt;
        printf("请输入录入几个学生的信息\n");
        scanf("%d", &cnt);
        stucnt = cnt;
        printf("请输入学生信息(请如以下格式:2207820235 张三\n");
        printf("学号 学生姓名\n");
        for (int i = 0; i < cnt; i++) {
        scanf("%d", &stus[i].stucode);
        scanf("%s", stus[i].stuname);
        }
        printf("学生信息已经录入完毕\n");
    }
    

4.5 学生选课功能模块 Studentcourse()

Studentcourse()选课模块也是用swich分支结构,调用Select1()、 Select2() 、Select3()子函数完成查询可选课程 、选择课程 、查询已选课程 的功能。

4.5.1 Studentcourse()选课函数

    void Studentcourse() { //学生选课
        int choice;
        printf("10.查询可选课程\n");
        printf("11.选择课程\n");
        printf("12.查询已选课程\n");
        printf("请输入你的操作编号\n");
        scanf("%d", &choice);
        switch (choice)
        {
            case 10: 
                {
                    Select1();
                    break;
                }
            case 11:
                {
                    Select2();
                    break;
                }
            case 12:
                {
                    Select3();
                    break;
                }
            default : 
                {
                printf("输入操作编号错误!\n");
                }
        }
    }

4.5.2 Studentcourse()选课函数的子函数:

Select1()查询可选课程:
    void Select1() { //展示可选课程信息
    for (int i = 0; i < coursecnt; i++) {
        printf("%d %s %s %d %d %d %f %d\n",
        courses[i].coursecode,
        courses[i].coursename,
        courses[i].coursetype,
        courses[i].totalhour,
        courses[i].classhour,
        courses[i].exercisehour,
        courses[i].credit,
        courses[i].term);
    }
    printf("课程数据已全部展示!\n");
    }
Select2() 选择课程函数:
  • Select2()选择课程函数解析:
    输入学号,调用judge()函数判断输入学号正确以后 ,用switch分支结构调用Selectcode(studentcode) 、 Selectname(studentcode)、 Selectype(studentcode)、 Selectype(studentcode)、 Selectctime(studentcode)、 Selectcredit(studentcode) 、 Selectterm(studentcode)函数,实现了根据课程编号、课程名称、课程性质、课程总学时、课程授课学时、课程上机学时、课程开设学期选课的功能。
    void Select2() { //学生选课
        int studentcode;
        printf("请输入学生学号!\n");
        scanf("%d", &studentcode);
        if (judge1(studentcode)) 
            {
                printf("不存在此学生信息,请先录入学生信息!\n");
            } 
        else 
            {
                int choice;
                printf("13.根据课程编号选择\n");
                printf("14.根据课程名称选择\n");
                printf("15.根据课程性质选择\n");
                printf("16.根据课程总学时选择\n");
                printf("17.根据课程授课学时选择\n");
                printf("18.根据课程上机学时选择\n");
                printf("19.根据课程学分选择\n");
                printf("20.根据课程开设学期选择\n");
                printf("请输入操作编号!\n");
                scanf("%d", &choice);
                switch (choice) 
                    {
                        case 13 :
                            Selectcode(studentcode);
                            break;
                        case 14:
                            Selectname(studentcode);
                            break;
                        case 15:
                            Selectype(studentcode);
                            break;
                        case 16:
                            Selecttime(studentcode);
                            break;
                        case 17:
                            Selectctime(studentcode);
                            break;
                        case 18:
                            Selectetime(studentcode);
                            break;
                        case 19:
                            Selectcredit(studentcode);
                            break;
                        case 20:
                            Selectterm(studentcode);
                            break;
                    }
            }
    }
  • Select2() 的子函数——judge()函数

judge1(int studentcode) 是学号判断函数 ;studentcode是学号 这个函数意思就是用for循环遍历整个学生数组stdus[],如果输入的学号与学生信息数组中第i个学生stdus[i]的学号匹配 就说明输入的学号真实存在 就返回0 否则返回1

int judge1(int studentcode) {
        int x = 1;
        for (int i = 0; i < stucnt; i++) {    //
            if (studentcode == stus[i].stucode)   //如果学生数组与输入的学号studentcode相匹配  
            x = 0;                                //就说明输入的学号正确 那么就让x=0  
        }
        return x;                                 //返回0 就说明学号输入正确  反之如果返回1 就说明输入的学号错误 查无此学号 
    }

judge2(int selectcode) 是课程编号判断函数 selectcode是要选课的课程编号 这个函数意思就是用for循环遍历整个课程数组course[] 如果课程数组中第i个课程course[i]的课程编号与输入的课程编号studentcode相匹配 就说明输入的课程编号真实存在 课程编号输入正确 那么就让x=0 就返回0 否则返回1

int judge2(int selectcode) { //判断函数;selectcode是要选课的课程编号 这个函数意思就是如果输入的课程编号与课程信息信息数组course[]中已存储课程编号相匹配 就返回0 否则返回1 
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {  //用for循环遍历整个课程数组course[]
            if (selectcode == courses[i].coursecode)  //如果课程数组中第i个课程course[i]的课程编号与输入的课程编号studentcode相匹配  
            x = 0;                                    //就说明输入的课程编号真实存在 课程编号输入正确  那么就让x=0 
        }
        return x;
    }

余下判断函数同理

  • Select2() 的子函数——选课模块函数

1.通过课程编号选课Selectcode()

void Selectcode(int studentcode) {
        for (int k = 0; k < stucnt; k++) 
            {
                if (studentcode == stus[k].stucode) 
                {
                    selectcode2(k);
                }
            }
    }
    void selectcode2(int k) { //通过课程编号选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectcode, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
            
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入你要选择课程的编号!\n");
                    scanf("%d", &selectcode);
                    if (judge2(selectcode)) {
                        printf("输入课程编号错误,请重新输入!\n");
                    } 
                    else {
                        for (int m = 0; m < coursecnt; m++) {
                            if (selectcode == courses[m].coursecode)  
                            s = m;  //s是输入的选择课程在courses数组中的序号 
                        } 
                        stus[k].selectcode[t] = courses[s].coursecode;
                        stus[k].selectnumber++;
                        printf("选课成功!\n");
                    }
                    if (count > 1)
                        t++;
                } 
                
        else
            printf("选课失败,请按要求进行选课!\n");
    }

2.通过课程名称选课 selectname()

    void Selectname(int studentcode) {
        for (int k = 0; k < stucnt; k++)
           {
            if (studentcode == stus[k].stucode) 
                {
                    selectname2(k);
                }
        }
    }
    void selectname2(int k) { //通过课程名称选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int count, a = 2;
        char selectname[20];
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入您要选择课程的名称!\n");
                    scanf("%s", selectname);
                    for (int i = 0; i < coursecnt; i++) {
                    if (strcmp(selectname, courses[i].coursename) == 0) //如果输入课程名称和第i个课程名相同 
                    a = 1;                                               
                    }
                    if (a == 1)
                        {
                            for (int m = 0; m < coursecnt; m++)
                            {
                                if (strcmp(selectname, courses[m].coursename) == 0)
                                s = m;
                            }
                            stus[k].selectcode[t] = courses[s].coursecode;
                            stus[k].selectnumber++;
                            printf("选课成功!\n");
                        } 
                    else if (a == 2) {
                        printf("输入课程名称错误,请重新输入!\n");
                    }
                    if (count > 1)
                        t++;
                    a = 2;
                } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }

3.通过课程性质选课Selectype()

void Selectype(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selecttype2(k);
    }
    }
    }
void selecttype2(int k) { //通过课程性质选课
        int t = 0, s, a = 2;
        char selecttype[20];
        int count;
        printf("请问想要选择几门课程?\n");
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) {
                printf("请输入你要选择课程的课程性质!\n");
                scanf("%s", selecttype);
                for (int i = 0; i < coursecnt; i++) 
                    {
                        if (strcmp(selecttype, courses[i].coursetype) == 0)
                        a = 1;
                    }
                if (a == 1) 
                    {
                    for (int m = 0; m < coursecnt; m++)
                        {
                            if (strcmp(selecttype, courses[m].coursetype) == 0)
                            s = m;
                        }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                    } 
                else if (a == 2) 
                    {
                        printf("输入课程性质错误,请重新输入!\n");
                    }
                if (count > 1)
                t++;
            } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }

4.通过课程总学时选课 Selecttime()

    void Selecttime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selecttime2(k);
    }
    }
    }
void selecttime2(int k) { //通过课程总学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selecttime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入你要选择课程的总学时!\n");
                    scanf("%d", &selecttime);
                    if (judge3(selecttime)) {
                        printf("输入课程总学时错误,请重新输入!\n");
                    } 
                    else {
                        for (int m = 0; m < coursecnt; m++) {
                        if (selecttime == courses[m].totalhour)
                        s = m;
                        }
                        stus[k].selectcode[t] = courses[s].coursecode;
                        stus[k].selectnumber++;
                        printf("选课成功!\n");
                    }
                    if (count > 1)
                    t++;
                } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }

5.通过课程授课学时选课 selectctime()

    void Selectctime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectctime2(k);
    }
    }
    }
    void selectctime2(int k) { //通过课程授课学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectctime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
        for (int i = 0; i < count; i++) 
            {
                printf("请输入你要选择课程的授课学时!\n");
                scanf("%d", &selectctime);
                if (judge4(selectctime)) {
                    printf("输入课程授课学时错误,请重新输入!\n");
                } 
                else {
                    for (int m = 0; m < coursecnt; m++) 
                       {
                            if (selectctime == courses[m].classhour)
                            s = m;
                       }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                    }
                if (count > 1)
                t++;
            }
        else
            printf("选课失败,请按要求进行选课!\n");
    }

6.通过课程上机或实验学时选课selectetime()

    void Selectetime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectetime2(k);
    }
    }
    }
    void selectetime2(int k) { //通过课程上机或实验学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectetime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) {
                printf("请输入你要选择课程的上机学时!\n");
                scanf("%d", &selectetime);
                if (judge5(selectetime)) {
                printf("输入课程上机学时错误,请重新输入!\n");
                } 
                else {
                    for (int m = 0; m < coursecnt; m++)
                   {
                        if (selectetime == courses[m].coursecode)
                        s = m;
                    }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                }
                if (count > 1)
                t++;
            } 
        else
        printf("选课失败,请按要求进行选课!\n");
    }

7.通过课程学分选课 selectcredit()

void Selectcredit(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectcredit2(k);
    }
    }
    }
void selectcredit2(int k) { //通过课程学分选课
    int t = 0, s;
    printf("请问想要选择几门课程?\n");
    int selectcredit, count;
    scanf("%d", &count);
    if (count < 1)
        printf("选课失败,请按照要求进行选课!\n");
    else if (count >= 1 && count <= coursecnt)
        for (int i = 0; i < count; i++) {
            printf("请输入你要选择课程的学分!\n");
            scanf("%d", &selectcredit);
            if (judge6(selectcredit)) {
            printf("输入课程学分错误,请重新输入!\n");
            } 
            else {
                for (int m = 0; m < coursecnt; m++)
                    {
                        if (selectcredit == courses[m].credit)
                        s = m;
                    }
                stus[k].selectcode[t] = courses[s].coursecode;
                stus[k].selectnumber++;
                printf("选课成功!\n");
            }
            if (count > 1)
            t++;
        } 
    else
        printf("选课失败,请按要求进行选课!\n");
    }

8,通过课程开课学期选课 selectterm()

void Selectterm(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectterm2(k);
    }
    }
    }
    void selectterm2(int k) { //通过课程开课学期选课
    int t = 0, s;
    printf("请问想要选择几门课程?\n");
    int selectterm, count;
    scanf("%d", &count);
    if (count < 1)
        printf("选课失败,请按照要求进行选课!\n");
    else if (count >= 1 && count <= coursecnt)
    for (int i = 0; i < count; i++) 
        {
            printf("请输入你要选择课程的开课学期!\n");
            scanf("%d", &selectterm);
            if (judge7(selectterm)) {
                printf("输入课程开课学期错误,请重新输入!\n");
            } 
            else 
                {
                    for (int m = 0; m < coursecnt; m++) 
                        {
                            if (selectterm == courses[m].term)
                            s = m;
                        }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                }
            if (count > 1)
            t++;
        } 
    else
        printf("选课失败,请按要求进行选课!\n");
    }

Select3() 查询已选课程:

    void Select3() {
        int studentcode;
        printf("请输入想要查询学生的学号!\n");
        scanf("%d", &studentcode);
        if (judge1(studentcode))
            printf("无此学生信息,请先录入信息!\n");
        else {
            query(studentcode);
        }
    }

4.6 选修课程统计模块 Statistic()

Statistic() 用switch分支结构调用了子函数 Statistic1() Statistic2() Statistic3() Statistic4()实现统计功能:
    void Statistic() { //统计
        printf("21.统计学生选了多少门课程\n");
        printf("22.统计课程的选择人数\n");
        printf("23.统计选择某门课程的学生信息\n");
        int choice;
        printf("请输入你的选择!\n");
        scanf("%d", &choice);
        switch (choice) 
            {
                case 21:
                Statistic1();
                break;
                case 22:
                Statistic3();
                break;
                case 23:
                Statistic4();
                break;
            }
    }
    
子函数 Statistic1() Statistic2() Statistic3() Statistic4()如下:
    void Statistic1() { //统计学生选课数量
        printf("请输入想要查询学生的学号!\n");
        int stucode;
        scanf("%d", &stucode);
        for (int i = 0; i < stucnt; i++) {
        if (stucode == stus[i].stucode) 
            {
                printf("该学生一共选择的课程数量:");
                printf("%d\n", stus[i].selectnumber);
            }
        }
    }
    
    int Statistic2(int coursecode) {
        int acount = 0;
        for (int i = 0; i < stucnt; i++) {
        for (int k = 0; k < stucnt; k++) {
        if (coursecode == stus[i].selectcode[k])
        acount++;
        }
        }
        return acount;
    }
    
    void Statistic3() { //统计选择某门课程的人数
        int coursecode, count = 0;
        printf("请输入你想要查询课程的编号!\n");
        scanf("%d", &coursecode);
        count = Statistic2(coursecode);
        for (int i = 0; i < coursecnt; i++) {
        if (coursecode == courses[i].coursecode) {
        printf("选择该课程的人数:");
        printf("%d\n", count);
        }
        }
    }
    
    void Statistic4() {
    }

4.7 退出系统

附录 完整代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct CourseInfor { //定义课程信息结构体数组 全局变量
        int coursecode; //课程编号
        char coursename[20]; //课程名称
        char coursetype[20]; //课程性质
        int totalhour; //总学时
        int classhour; //授课学时
        int exercisehour; //上机或实验学时
        float credit; //学分
        int term; //开课学期
    };
    
    struct StudentInfor { //定义学生结构体数组 全局变量
        int stucode; //学号
        char stuname[20]; //学生姓名
        int selectnumber; //选择的课程数量
        int selectcode[100]; //选择课程的编号
    };
    
    struct CourseInfor courses[100];  //定义了课程信息(CourseInfo)结构体数组 数组名字叫course[] 数组大小为100  也就是course[]数组中可以存100门课程
    struct StudentInfor stus[100];    //定义了学生信息(StudentInfo)结构体数组  数组名称叫stdus[]  数组大小为100  也就是stdus[]数组中可以存100门课程
    int coursecnt = 0; //课程数量 注:cnt是count的缩写 用作计数器 coursecnt就是course count的缩写 所以coursecnt意思是课程的计数 
    int stucnt = 0; //学生数量    注:cnt是count的缩写 用作计数器 stucnt就是student count的缩写 所以coursecnt意思是学生的计数 

    int judge1(int studentcode) { //判断函数 ;studentcode是学号 这个函数意思就是如果输入的学号与学生信息数组stdus[]中的学生的学号匹配 就返回0 否则返回1 
        int x = 1;
        for (int i = 0; i < stucnt; i++) {    //用for循环遍历整个学生数组stdus[]
            if (studentcode == stus[i].stucode)   //如果学生数组中第i个学生stdus[i]的学号与输入的学号studentcode相匹配  
            x = 0;                                //就说明输入的学号正确 那么就让x=0  
        }
        return x;                                 //返回0 就说明学号输入正确  反之如果返回1 就说明输入的学号错误 查无此学号 
    }
    int judge2(int selectcode) { //判断函数;selectcode是要选课的课程编号 这个函数意思就是如果输入的课程编号与课程信息信息数组course[]中已存储课程编号相匹配 就返回0 否则返回1 
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {  //用for循环遍历整个课程数组course[]
            if (selectcode == courses[i].coursecode)  //如果课程数组中第i个课程course[i]的课程编号与输入的课程编号studentcode相匹配  
            x = 0;                                    //就说明输入的课程编号真实存在 课程编号输入正确  那么就让x=0 
        }
        return x;
    }
    int judge3(int selecttime) { //判断函数
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {
            if (selecttime == courses[i].totalhour)
            x = 0;
        }
        return x;
    }
    int judge4(int selectctime) { //判断函数
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {
            if (selectctime == courses[i].classhour)
            x = 0;
        }
        return x;
    }
    int judge5(int selectetime) { //判断函数
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {
            if (selectetime == courses[i].exercisehour)
            x = 0;
        }
        return x;
    }
    int judge6(int selectcredit) { //判断函数
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {
            if (selectcredit == courses[i].credit)
            x = 0;
        }
        return x;
    }
    int judge7(int selectterm) { //判断函数
        int x = 1;
        for (int i = 0; i < coursecnt; i++) {
            if (selectterm == courses[i].term)
            x = 0;
        }
        return x;
    }
    void selectcode2(int k) { //通过课程编号选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectcode, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
            
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入你要选择课程的编号!\n");
                    scanf("%d", &selectcode);
                    if (judge2(selectcode)) {
                        printf("输入课程编号错误,请重新输入!\n");
                    } 
                    else {
                        for (int m = 0; m < coursecnt; m++) {
                            if (selectcode == courses[m].coursecode)  
                            s = m;  //s是输入的选择课程在courses数组中的序号 
                        } 
                        stus[k].selectcode[t] = courses[s].coursecode;
                        stus[k].selectnumber++;
                        printf("选课成功!\n");
                    }
                    if (count > 1)
                        t++;
                } 
                
        else
            printf("选课失败,请按要求进行选课!\n");
    }
    
    void selectname2(int k) { //通过课程名称选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int count, a = 2;
        char selectname[20];
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入您要选择课程的名称!\n");
                    scanf("%s", selectname);
                    for (int i = 0; i < coursecnt; i++) {
                    if (strcmp(selectname, courses[i].coursename) == 0) //如果输入课程名称和第i个课程名相同 
                    a = 1;                                               
                    }
                    if (a == 1)
                        {
                            for (int m = 0; m < coursecnt; m++)
                            {
                                if (strcmp(selectname, courses[m].coursename) == 0)
                                s = m;
                            }
                            stus[k].selectcode[t] = courses[s].coursecode;
                            stus[k].selectnumber++;
                            printf("选课成功!\n");
                        } 
                    else if (a == 2) {
                        printf("输入课程名称错误,请重新输入!\n");
                    }
                    if (count > 1)
                        t++;
                    a = 2;
                } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }
    
    void selecttype2(int k) { //通过课程性质选课
        int t = 0, s, a = 2;
        char selecttype[20];
        int count;
        printf("请问想要选择几门课程?\n");
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) {
                printf("请输入你要选择课程的课程性质!\n");
                scanf("%s", selecttype);
                for (int i = 0; i < coursecnt; i++) 
                    {
                        if (strcmp(selecttype, courses[i].coursetype) == 0)
                        a = 1;
                    }
                if (a == 1) 
                    {
                    for (int m = 0; m < coursecnt; m++)
                        {
                            if (strcmp(selecttype, courses[m].coursetype) == 0)
                            s = m;
                        }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                    } 
                else if (a == 2) 
                    {
                        printf("输入课程性质错误,请重新输入!\n");
                    }
                if (count > 1)
                t++;
            } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }
    
    void selecttime2(int k) { //通过课程总学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selecttime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) 
                {
                    printf("请输入你要选择课程的总学时!\n");
                    scanf("%d", &selecttime);
                    if (judge3(selecttime)) {
                        printf("输入课程总学时错误,请重新输入!\n");
                    } 
                    else {
                        for (int m = 0; m < coursecnt; m++) {
                        if (selecttime == courses[m].totalhour)
                        s = m;
                        }
                        stus[k].selectcode[t] = courses[s].coursecode;
                        stus[k].selectnumber++;
                        printf("选课成功!\n");
                    }
                    if (count > 1)
                    t++;
                } 
        else
            printf("选课失败,请按要求进行选课!\n");
    }
    void selectctime2(int k) { //通过课程授课学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectctime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
        for (int i = 0; i < count; i++) 
            {
                printf("请输入你要选择课程的授课学时!\n");
                scanf("%d", &selectctime);
                if (judge4(selectctime)) {
                    printf("输入课程授课学时错误,请重新输入!\n");
                } 
                else {
                    for (int m = 0; m < coursecnt; m++) 
                       {
                            if (selectctime == courses[m].classhour)
                            s = m;
                       }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                    }
                if (count > 1)
                t++;
            }
        else
            printf("选课失败,请按要求进行选课!\n");
    }
    
    void selectetime2(int k) { //通过课程上机或实验学时选课
        int t = 0, s;
        printf("请问想要选择几门课程?\n");
        int selectetime, count;
        scanf("%d", &count);
        if (count < 1)
            printf("选课失败,请按照要求进行选课!\n");
        else if (count >= 1 && count <= coursecnt)
            for (int i = 0; i < count; i++) {
                printf("请输入你要选择课程的上机学时!\n");
                scanf("%d", &selectetime);
                if (judge5(selectetime)) {
                printf("输入课程上机学时错误,请重新输入!\n");
                } 
                else {
                    for (int m = 0; m < coursecnt; m++)
                   {
                        if (selectetime == courses[m].coursecode)
                        s = m;
                    }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                }
                if (count > 1)
                t++;
            } 
        else
        printf("选课失败,请按要求进行选课!\n");
    }
    
    void selectcredit2(int k) { //通过课程学分选课
    int t = 0, s;
    printf("请问想要选择几门课程?\n");
    int selectcredit, count;
    scanf("%d", &count);
    if (count < 1)
        printf("选课失败,请按照要求进行选课!\n");
    else if (count >= 1 && count <= coursecnt)
        for (int i = 0; i < count; i++) {
            printf("请输入你要选择课程的学分!\n");
            scanf("%d", &selectcredit);
            if (judge6(selectcredit)) {
            printf("输入课程学分错误,请重新输入!\n");
            } 
            else {
                for (int m = 0; m < coursecnt; m++)
                    {
                        if (selectcredit == courses[m].credit)
                        s = m;
                    }
                stus[k].selectcode[t] = courses[s].coursecode;
                stus[k].selectnumber++;
                printf("选课成功!\n");
            }
            if (count > 1)
            t++;
        } 
    else
        printf("选课失败,请按要求进行选课!\n");
    }
    
    void selectterm2(int k) { //通过课程开课学期选课
    int t = 0, s;
    printf("请问想要选择几门课程?\n");
    int selectterm, count;
    scanf("%d", &count);
    if (count < 1)
        printf("选课失败,请按照要求进行选课!\n");
    else if (count >= 1 && count <= coursecnt)
    for (int i = 0; i < count; i++) 
        {
            printf("请输入你要选择课程的开课学期!\n");
            scanf("%d", &selectterm);
            if (judge7(selectterm)) {
                printf("输入课程开课学期错误,请重新输入!\n");
            } 
            else 
                {
                    for (int m = 0; m < coursecnt; m++) 
                        {
                            if (selectterm == courses[m].term)
                            s = m;
                        }
                    stus[k].selectcode[t] = courses[s].coursecode;
                    stus[k].selectnumber++;
                    printf("选课成功!\n");
                }
            if (count > 1)
            t++;
        } 
    else
        printf("选课失败,请按要求进行选课!\n");
    }
    
    void Courseinsert() { //课程信息录入
        int i;
        int cnt = 0;
        printf("请输入录入课程数量:\n");
        scanf("%d", &cnt);
        coursecnt = cnt;
        printf("请输入课程信息(格式如下:1 C语言 编程语言 30 20 10 1 1):\n");
        printf("课程编号 课程名称 课程性质 总学时 授课学时 上机学时 学分 开课学期\n");
        for (i = 0; i < cnt; i++) {
            scanf("%d", &courses[i].coursecode);
            scanf("%s", courses[i].coursename);
            scanf("%s", courses[i].coursetype);
            scanf("%d", &courses[i].totalhour);
            scanf("%d", &courses[i].classhour);
            scanf("%d", &courses[i].exercisehour);
            scanf("%f", &courses[i].credit);
            scanf("%d", &courses[i].term);
        }
        printf("数据已录入完毕\n");
    }
    void Coursebrowse() { //课程信息浏览
        int cnt, i;
        printf("请输入想浏览多少门课程:\n");
        scanf("%d", &cnt);
        if (cnt < 1 || cnt > coursecnt) {
            printf("输入数据错误,请重新输入!\n");
            Coursebrowse();
        } 
        else {
            for (i = 0; i < cnt; i++) 
                {
                    printf("%d %s %s %d %d %d %f %d\n",
                    courses[i].coursecode,
                    courses[i].coursename,
                    courses[i].coursetype,
                    courses[i].totalhour,
                    courses[i].classhour,
                    courses[i].exercisehour,
                    courses[i].credit,
                    courses[i].term);
                }
            printf("课程数据已经全部展示!\n");
        }
    }
    void Coursequery() { //查询课程信息
        printf("8.根据课程性质查询\n");
        printf("9.根据学分查询\n");
        printf("请输入所要查询编号\n");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
            case 8:
            char coursetype[20];
            printf("请输入课程性质\n");
            scanf("%s", coursetype);
            for (int i = 0; i < coursecnt; i++) {
            if (strcmp(coursetype, courses[i].coursetype) == 0) {
            printf("%d %s %s %d %d %d %f %d\n",
            courses[i].coursecode,
            courses[i].coursename,
            courses[i].coursetype,
            courses[i].totalhour,
            courses[i].classhour,
            courses[i].exercisehour,
            courses[i].credit,
            courses[i].term);
            }
            }
            printf("数据已全部展示\n");
            break;
        case 9:
            float credit;
            printf("请输入所要查询的课程学分\n");
            scanf("%f", &credit);
            for (int i = 0; i < coursecnt; i++) {
                if (credit == courses[i].credit) 
                    {
                        printf("%d %s %s %d %d %d %f %d\n",
                        courses[i].coursecode,
                        courses[i].coursename,
                        courses[i].coursetype,
                        courses[i].totalhour,
                        courses[i].classhour,
                        courses[i].exercisehour,
                        courses[i].credit,
                        courses[i].term);
                    }
            }
            printf("数据已经全部展示\n");
            break;
        default:
            printf("输入选项错误,请重新输入!\n");
            Coursequery();
        }
    }
    
    void Studentinsert() { //学生信息录入
        int cnt;
        printf("请输入录入几个学生的信息\n");
        scanf("%d", &cnt);
        stucnt = cnt;
        printf("请输入学生信息(请如以下格式:2207820235 张三\n");
        printf("学号 学生姓名\n");
        for (int i = 0; i < cnt; i++) {
        scanf("%d", &stus[i].stucode);
        scanf("%s", stus[i].stuname);
        }
        printf("学生信息已经录入完毕\n");
    }
    
    void Selectcode(int studentcode) {
        for (int k = 0; k < stucnt; k++) 
            {
                if (studentcode == stus[k].stucode) 
                {
                    selectcode2(k);
                }
            }
    }
    
    void Selectname(int studentcode) {
        for (int k = 0; k < stucnt; k++)
           {
            if (studentcode == stus[k].stucode) 
                {
                    selectname2(k);
                }
        }
    }
    
    void Selectype(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selecttype2(k);
    }
    }
    }
    
    void Selecttime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selecttime2(k);
    }
    }
    }
    
    void Selectctime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectctime2(k);
    }
    }
    }
    
    void Selectetime(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectetime2(k);
    }
    }
    }
    
    void Selectcredit(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectcredit2(k);
    }
    }
    }
    
    void Selectterm(int studentcode) {
    for (int k = 0; k < stucnt; k++) {
    if (studentcode == stus[k].stucode) {
    selectterm2(k);
    }
    }
    }
    
    void query(int studentcode) { //查询已选课程信息
    for (int i = 0; i < stucnt; i++) {
    if (studentcode == stus[i].stucode) {
    printf("姓名:%s\n", stus[i].stuname);
    printf("学号:%d\n", stus[i].stucode);
    printf("选择课程的编号:");
    for (int j = 0; j < coursecnt; j++) {
    printf("%3d", stus[i].selectcode[j]);
    }
    printf("\n");
    }
    }
    }
    
    void Select1() { //展示可选课程信息
    for (int i = 0; i < coursecnt; i++) {
        printf("%d %s %s %d %d %d %f %d\n",
        courses[i].coursecode,
        courses[i].coursename,
        courses[i].coursetype,
        courses[i].totalhour,
        courses[i].classhour,
        courses[i].exercisehour,
        courses[i].credit,
        courses[i].term);
    }
    printf("课程数据已全部展示!\n");
    }
    
    void Select2() { //学生选课
        int studentcode;
        printf("请输入学生学号!\n");
        scanf("%d", &studentcode);
        if (judge1(studentcode)) 
            {
                printf("不存在此学生信息,请先录入学生信息!\n");
            } 
        else 
            {
                int choice;
                printf("13.根据课程编号选择\n");
                printf("14.根据课程名称选择\n");
                printf("15.根据课程性质选择\n");
                printf("16.根据课程总学时选择\n");
                printf("17.根据课程授课学时选择\n");
                printf("18.根据课程上机学时选择\n");
                printf("19.根据课程学分选择\n");
                printf("20.根据课程开设学期选择\n");
                printf("请输入操作编号!\n");
                scanf("%d", &choice);
                switch (choice) 
                    {
                        case 13 :
                            Selectcode(studentcode);
                            break;
                        case 14:
                            Selectname(studentcode);
                            break;
                        case 15:
                            Selectype(studentcode);
                            break;
                        case 16:
                            Selecttime(studentcode);
                            break;
                        case 17:
                            Selectctime(studentcode);
                            break;
                        case 18:
                            Selectetime(studentcode);
                            break;
                        case 19:
                            Selectcredit(studentcode);
                            break;
                        case 20:
                            Selectterm(studentcode);
                            break;
                    }
            }
    }
    
    void Select3() {
        int studentcode;
        printf("请输入想要查询学生的学号!\n");
        scanf("%d", &studentcode);
        if (judge1(studentcode))
            printf("无此学生信息,请先录入信息!\n");
        else {
            query(studentcode);
        }
    }
    
    void Studentcourse() { //学生选课
        int choice;
        printf("10.查询可选课程\n");
        printf("11.选择课程\n");
        printf("12.查询已选课程\n");
        printf("请输入你的操作编号\n");
        scanf("%d", &choice);
        switch (choice)
        {
            case 10: 
                {
                    Select1();
                    break;
                }
            case 11:
                {
                    Select2();
                    break;
                }
            case 12:
                {
                    Select3();
                    break;
                }
            default : 
                {
                printf("输入操作编号错误!\n");
                }
        }
    }
    
    void Statistic1() { //统计学生选课数量
        printf("请输入想要查询学生的学号!\n");
        int stucode;
        scanf("%d", &stucode);
        for (int i = 0; i < stucnt; i++) {
        if (stucode == stus[i].stucode) 
            {
                printf("该学生一共选择的课程数量:");
                printf("%d\n", stus[i].selectnumber);
            }
        }
    }
    
    int Statistic2(int coursecode) {
        int acount = 0;
        for (int i = 0; i < stucnt; i++) {
        for (int k = 0; k < stucnt; k++) {
        if (coursecode == stus[i].selectcode[k])
        acount++;
        }
        }
        return acount;
    }
    
    void Statistic3() { //统计选择某门课程的人数
        int coursecode, count = 0;
        printf("请输入你想要查询课程的编号!\n");
        scanf("%d", &coursecode);
        count = Statistic2(coursecode);
        for (int i = 0; i < coursecnt; i++) {
        if (coursecode == courses[i].coursecode) {
        printf("选择该课程的人数:");
        printf("%d\n", count);
        }
        }
    }
    
    void Statistic4() {
    }
    
    void Statistic() { //统计
        printf("21.统计学生选了多少门课程\n");
        printf("22.统计课程的选择人数\n");
        printf("23.统计选择某门课程的学生信息\n");
        int choice;
        printf("请输入你的选择!\n");
        scanf("%d", &choice);
        switch (choice) 
            {
                case 21:
                Statistic1();
                break;
                case 22:
                Statistic3();
                break;
                case 23:
                Statistic4();
                break;
            }
    }
    
    int main() { //主函数
    for (int i = 1; i; i++) {
    int n;
    printf("*************欢迎使用学生选修课程系统***************\n");
    printf("\t *** 菜单 ***\n");
    printf("\t**** 1.录入课程信息 ****\n");
    printf("\t**** 2.浏览课程信息 ****\n");
    printf("\t**** 3.查询课程信息 ****\n");
    printf("\t**** 4.录入学生信息 ****\n");
    printf("\t**** 5.学生选修课程 ****\n");
    printf("\t**** 6.选修课程统计 ****\n");
    printf("\t**** 7.退出系统 ****\n");
    printf("\t**** 请输入你的选择! ****\n");
    scanf("%d", &n);
    if (n < 1 || n > 7) {
    printf("输入错误");
    scanf("%d", &n);
    } else if (n >= 1 && n < 7) {
    switch (n) {
    case 1:
    Courseinsert();
    break;
    case 2:
    Coursebrowse();
    break;
    case 3:
    Coursequery();
    break;
    case 4:
    Studentinsert();
    break;
    case 5:
    Studentcourse();
    break;
    case 6:
    Statistic();
    break;
    }
    } else {
    break;
    }
    }
    return 0;
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容