学生选课系统

      第一次发博客,挺激动的。写的是学生选课系统,也算是自己的第二个小项目,第一个是算术表达式,不怕丢人哈哈,写的过程中都是非常艰难,经常写到一半就写不下去了,因为一开始的构思就是错误的。当然,也谈不上什么构思,就是简单的想了一下大体的方向。所以到后面越来越难做,只好重新修改一遍。包括这次也是如此。以后这方面要小心,一定要先认真的构思一下。也有一部分原因是好久没编程了,结构体和指针的一些知识都还给老师了,所以这次也算是边写边学了吧。

     我编程的时间不长,所以这里面肯定有一些错误,或者存在更好的解决方案,欢迎大神上课!谢谢!

ps:寻找一起学习的小伙伴!


/*********************************
*主题:学生选修课程系统设计 
* 
*设计要求: 
*1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加的类别,要求编号要唯一,如果添加了重复编号的记录是,则提示数据添加重复并取消添加。 
*2.查询功能:可根据编号、姓名等信息对已添加的同学和课程记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 
*3.显示功能:可显示当前系统中所有学生和课程的记录,每条记录占据一行。 
*4.编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 
*5.删除功能:主要实现对已添加的学生和课程记录进行删除。如果当前系统中没有对应的记录,则提示“记录为空!”并返回操作。 
*6.统计功能:能根据多种参数进行统计。能统计学生人数、课程门数、选修某门课程的学生的相关信息。 
*
*********************************/
/* 
*    Verson:2.0(basic) 
*    
*    History: 完成课程信息的录入,查询等操作;完成选课功能(2017-05-05 20:30:00-01:20:00) 
*
*    Author:universes 
*
*
*********************************/
/* 
*    Verson:1.9
*    
*    History:完成了学生信息的查询操作 (2017-05-04 22:00:32-01:11:00) 
*
*    Author:universes 
*
*
********************************/
/* 
*    Verson:1.5
*    
*    HIstory2:添加查重功能 (2017-05-02 23:39:19-01:06:05) 
*    History1:完成了用户对课程和学生信息的添加操作(没有查重功能)(2017-05-02 22:06:13-23:39:19) 
*
*    Author:universes
*
*
********************************/
/* 
*    Verson:1.0 
*
*    History:完成了用户的选择功能框架(2017-04-19 22:06:13-22:40:47) 
*
*    Author:universes 
*
*
********************************/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

#define SIZE_STU 10
#define SIZE_COU 10
#define SIZE_SEL 10
//函数声明部分 
void home(void);
void stu_operate(void);
void cou_operate(void);
void statistic(void);
void choose(void);
void delete_sel(int);
//--学生信息部分: 
void input_stu(void);
void search_stu(void);
void search_stu_id(void);
void search_stu_name(void);
void show_stu(void);
void edit_stu(void);
void renew_stu(void); 
void delete_stu(void);
//--课程信息部分: 
void input_cou(void);
void search_cou(void);
void search_cou_id(void);
void search_cou_name(void);
void show_cou(void);
void edit_cou(void);
void renew_cou(void); 
void delete_cou(void);

/*学生信息结构体*/
struct student_info {
    char stu_ID[9];
    char stu_name[5];
    char sex[9];
    char age[9];
    char collage[9];
    char grade[9];
    char contact[9];
}stu[SIZE_STU];

/*课程信息结构体*/
struct course_info {
    char course_ID[9];
    char course_name[9];
    char property[9];
    char period[9];
    char credit[9];
    char time[9];
    int people;
}cou[SIZE_COU];

/*选课记录结构体*/
struct select {
    int s;//存放学生信息的数组下标 
    int c;//存放课程信息的数组下标 
}sel[SIZE_SEL]; 

//全局变量i,j,x分别是学生,课程,选课信息数组下标
int i = -1;
int j = -1;
int x = -1;

int main(void){
    //进入欢迎界面 
    home();
    return 0;
}

//欢迎界面 
void home(void) {
    printf("\n-------------------------欢迎进入选课系统!----------------------"); 
    int h;
    printf("\n\n                        请选择你要进行的操作:");
    printf("\n\n                             1.学生操作");
    printf("\n                             2.课程操作");
    printf("\n                             3.开始选课");
    printf("\n                             4.选课统计");
    printf("\n                             5.退出系统");
    printf("\n                                                      ");
    printf("\n                        请输入:");
    scanf("%d",&h);
    system("cls");
    switch(h){
        case 1:
            stu_operate();
            break;
        case 2:
            cou_operate(); 
            break;
        case 3:
            choose();
            break;
        case 4:
            statistic();
            break;
        default:
            system("cls");
            printf("BYE!");
            break;
    }
}
/*开始选课*/
void choose(void){
    char stu_id[10],cou_id[10];
    printf("\n-------------------------欢迎进入选课系统!----------------------"); 
    //输入选课学生信息 
    printf("\n\n                 请输入选课人学号:");
    fflush(stdin);
    scanf("%s",stu_id);
    int h,flag = 0;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,stu_id)==0){
            flag = 0;
            break;
        } else {
            flag = 1;
        }
    }
    if(flag||i==-1){
        printf("\n                 不存在此学号\n");
        system("pause");
        system("cls");
        home();
    }
    //录入姓名信息 
    x++;
    sel[x].s = h; 
    //输入课程信息 
    printf("\n\n                 请输入选修课程号:");
    fflush(stdin);
    scanf("%s",cou_id);
    flag = 0;
    for(h = 0;h <= j;h++){
        if(strcmp(cou[h].course_ID,cou_id)==0){
            flag = 0;
            break;
        } else {
            flag = 1;
        }
    }
    if(flag||j==-1){
        printf("\n                 不存在此课程号\n");
        x--;
        system("pause");
        system("cls");
        home();
    }
    //录入课程信息
    sel[x].c = h;
    cou[h].people++; 
    printf("\n                 录入成功!\n");
    system("pause");
    system("cls");
    home();
}
/*删除选课记录*/
void delete_sel(int q){//删除第q+1条记录 
/*注意!本函数没有将x减1,请在函数外手动减1(考虑外层函数循环的需要)*/    
    int h;
    cou[sel[q].c].people--;
    for(h = q;q < x;h++){
        q++;
        sel[h].c = sel[q].c;
        sel[h].s = sel[q].s;
    }
    
}
//对学生记录进行操作
void stu_operate(void) {
    printf("\n-------------------------欢迎进入选课系统!----------------------"); 
    printf("\n\n                 请选择你要对学生记录进行的操作:");
    printf("\n\n                             1.添加");
    printf("\n                             2.查询");
    printf("\n                             3.显示");
    printf("\n                             4.返回主页面");
    printf("\n                                                      ");
    printf("\n                        请输入:");
    int i;
    scanf("%d",&i);
    system("cls");
    switch(i){
        case 1://添加学生信息 
            input_stu();
            break;
        case 2://查询学生信息 
            search_stu(); 
            break;
        case 3://显示所有学生信息
            show_stu(); 
            break;
        case 4:
            home();
            break; 
    }
}
//对课程记录进行操作 
void cou_operate(void) {
    printf("\n-------------------------欢迎进入选课系统!----------------------"); 
    printf("\n\n                 请选择你要对课程记录进行的操作:");
    printf("\n\n                             1.添加");
    printf("\n                             2.查询");
    printf("\n                             3.显示");
    printf("\n                             4.返回主页面");
    printf("\n                                                      ");
    printf("\n                        请输入:");
    int i;
    scanf("%d",&i);
    system("cls");
    switch(i){
        case 1:
            input_cou();
            break;
        case 2:
            search_cou();
            break;
        case 3:
            show_cou();
        case 4:
            home();
            break; 
    }
}
//选课信息统计记录
void statistic(void){
    printf("\n-------------------------欢迎进入选课系统!----------------------"); 
    printf("\n\n                     共有学生信息:%d 条",i+1); 
    printf("\n                     共有课程信息:%d 条",j+1);
    if(x == -1){
        printf("\n                       选课记录:0 条");
        printf("\n\n                     "); 
        system("pause");
        system("cls");
        home();
    } else {
        printf("\n\n                        选课记录 %d 条:",x+1);
        int m;
        for(m = 0;m <= x;m++){
            printf("\n                     ================");
            printf("\n                     第%d条",m+1);
            printf("\n                     学生学号:%s",stu[sel[m].s].stu_ID);
            printf("\n                     学生姓名:%s",stu[sel[m].s].stu_name);
            printf("\n                     课程号:%s",cou[sel[m].c].course_ID);
            printf("\n                     课程名:%s",cou[sel[m].c].course_name); 
        }
        printf("\n\n            "); 
        system("pause");
        system("cls");
        home();
    }
    
}


//--------------------------------------学生信息插入--------------------------------------
void input_stu(void){
    char flag;
    FILE * fp;
    //--判断文件是否为空 
    fp = fopen("student.txt","r+");
    flag = fgetc(fp);
    if(flag==EOF){
        fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
    }
    fclose(fp);
    //-- 
    fp = fopen("student.txt","a+");
    if(fp == NULL){
        printf("打开文件失败!");
        system("cls");
        stu_operate();
    }
    printf("学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
    while(1){
        i++;
        scanf("%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
        //--数据查重
        int h; 
        for(h = 0;h < i;h++){
            if(i == 0) break;//第一条数据不需要查重 
            if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==0) {
                printf("该学号已存在,请重新输入!\n");
                scanf("\n%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
                h = -1;
            }
        }
        //-- 
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age,stu[i].collage,stu[i].grade,stu[i].contact);
        printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
        fflush(stdin); 
        scanf("%c",&flag); 
        fclose(fp);
        if(flag!='y'&&'Y') break;
        fp = fopen("student.txt","a");
    }
    renew_stu();
    system("cls");
    stu_operate();
} 
/*查询学生信息*/
void search_stu(void){
    system("cls");
    printf("\n请选择查询方式:");
    printf("\n  1.学号查询");
    printf("\n  2.姓名查询");
    printf("\n请选择:");
    int h;
    scanf(" %d",&h);
    switch(h){
        case 1:
            search_stu_id();
            break;
        case 2:
            search_stu_name();
            break;
            
    } 
}
/*学号查询*/
void search_stu_id(void){
    system("cls");
    char id[9];
    printf("\n输入学生的学号:");
    fflush(stdin); 
    scanf("%s",id);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,id)==0){
            system("cls");
            printf("查找成功!"); 
            printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
            printf("\n\t-----------------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
            system("pause");
            system("cls");
            stu_operate();
        }
    }
    system("cls");
    printf("没有此学号!\n");
    system("pause");
    system("cls");
    stu_operate();
} 
/*姓名查询*/
void search_stu_name(void){
    system("cls");
    char name[9];
    printf("\n输入学生的姓名:");
    fflush(stdin); 
    scanf("%s",name);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_name,name)==0){
            system("cls");
            printf("查找成功!"); 
            printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
            printf("\n\t---------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
            system("pause");
            system("cls");
            stu_operate();
        }
    }
    system("cls");
    printf("没有此姓名!");
    system("pause");
    system("cls");
    stu_operate();
} 
/*显示所有学生信息*/
void show_stu(void){
    int h;
    if(i == -1){
        printf("\n还没有录入信息!\n");
        system("pause");
        system("cls");
        stu_operate();
    }
    system("cls");
    printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
    printf("\n\t---------------------------------------------------------"); 
    for(h = 0;h <= i;h++){
        printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
    }
    //
    fflush(stdin);
    printf("\n\t1.修改");
    printf("\n\t2.删除"); 
    printf("\n\t3.返回");
    printf("\n\n  选择要进行的操作:");
    int flag;
    fflush(stdin);
    scanf("%d",&flag);
    switch(flag){
        case 1:
            edit_stu();
            break; 
        case 2:
            delete_stu();
            break;
        default:
            system("cls");
            stu_operate();
            break;
            
    } 
}
/*编辑学生信息*/
void edit_stu(void){
    printf("\n输入需要编辑的学生的学号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行 
            system("cls");
            printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
            printf("\n\t---------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
            printf("\n这是修改前的数据,请依次输入修改值:\n\t");
            fflush(stdin);
            scanf("%s %s %s %s %s %s %s",&stu[h].stu_ID,&stu[h].stu_name,&stu[h].sex,&stu[h].age,&stu[h].collage,&stu[h].grade,&stu[h].contact);
            int k;
            for(k = 0;k <= i;k++){
                if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){
                    if(k==h){
                        continue;
                    } else {//学号不唯一 
                        printf("\n此学号已存在!重新输入学号:");
                        fflush(stdin);
                        scanf("%s",&stu[h].stu_ID);
                        k = -1;
                    }
                }
            }
            /*将修改信息写入文件*/
            //思想:将原文件重新写入一遍
            renew_stu();
            system("cls");
            printf("修改成功!\n");
            system("pause"); 
            system("cls");
            stu_operate();
        }
    }
    printf("\n此学号不存在!\n");
    system("pause");
    system("cls");
    stu_operate();
}
/*删除学生信息*/
void delete_stu(void){
    printf("\n输入需要编辑的学生的学号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= i;h++){
        if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行 
            system("cls");
            //检查他/她是否选课了
            int a;
            for(a = 0;a <= x;a++){
                if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1 
                    delete_sel(a);
                    a = -1;
                    x--;
                    continue;
                }
            } 
            //如果只有一条记录
            if(i==0){
                i = -1;
                renew_stu();
                printf("修改成功!\n");
                system("pause"); 
                system("cls");
                stu_operate();
            } 
            
            int k;
            for(k = h+1;k <= i;k++,h++){//将数组直接向前移动 
                strcpy(stu[h].stu_ID,stu[k].stu_ID); 
                strcpy(stu[h].stu_name,stu[k].stu_name); 
                strcpy(stu[h].sex,stu[k].sex); 
                strcpy(stu[h].grade,stu[k].grade); 
                strcpy(stu[h].contact,stu[k].contact); 
                strcpy(stu[h].collage,stu[k].collage); 
                strcpy(stu[h].age,stu[k].age); 
            }
            /*将修改信息写入文件*/
            //思想:将原文件重新写入一遍
            renew_stu();
            i--;
            system("cls");
            printf("修改成功!\n");
            system("pause"); 
            system("cls");
            stu_operate();
        }
    }
    printf("\n此学号不存在!\n");
    system("pause");
    system("cls");
    stu_operate();
}
//--------------------------------------课程信息插入--------------------------------------
void input_cou(void){
    char flag;
    FILE * fp;
    //--判断文件是否为空 
    fp = fopen("course.txt","r+");
    flag = fgetc(fp);
    if(flag==EOF){
        fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
    }
    fclose(fp);
    //-- 
    fp = fopen("course.txt","a+");
    if(fp == NULL){
        printf("打开文件失败!");
        system("cls");
        cou_operate();
    }
    printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n");
    while(1){
        j++;
        scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
        //--数据查重
        int h; 
        for(h = 0;h < j;h++){
            if(j == 0) break;//第一条数据不需要查重 
            if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) {
                printf("该课程号已存在,请重新输入!\n");
                scanf("\n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
                h = -1;
            }
        }
        //-- 
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people);
        printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
        fflush(stdin); 
        scanf("%c",&flag); 
        fclose(fp);
        if(flag!='y'&&'Y') break;
        fp = fopen("course.txt","a");
    }
    renew_cou();
    system("cls");
    cou_operate();
} 
/*查询课程信息*/
void search_cou(void){
    system("cls");
    printf("\n请选择查询方式:");
    printf("\n  1.课程号查询");
    printf("\n  2.课程名查询");
    printf("\n请选择:");
    int h;
    scanf(" %d",&h);
    switch(h){
        case 1:
            search_cou_id();
            break;
        case 2:
            search_cou_name();
            break;
            
    } 
}
/*课程号查询*/
void search_cou_id(void){
    system("cls");
    char id[9];
    printf("\n输入课程号:");
    fflush(stdin); 
    scanf("%s",id);
    int h;
    for(h = 0;h <= j;h++){
        if(strcmp(cou[h].course_ID,id)==0){
            system("cls");
            printf("查找成功!"); 
            printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
            printf("\n\t-----------------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
            system("pause");
            system("cls");
            cou_operate();
        }
    }
    system("cls");
    printf("没有此课程号!\n");
    system("pause");
    system("cls");
    cou_operate();
} 
/*课程名查询*/
void search_cou_name(void){
    system("cls");
    char name[9];
    printf("\n输入课程名:");
    fflush(stdin); 
    scanf("%s",name);
    int h;
    for(h = 0;h <= j;h++){
        if(strcmp(cou[h].course_name,name)==0){
            system("cls");
            printf("查找成功!"); 
            printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
            printf("\n\t---------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
            system("pause");
            system("cls");
            cou_operate();
        }
    }
    system("cls");
    printf("没有此课程名!");
    system("pause");
    system("cls");
    cou_operate();
} 
/*显示所有课程信息*/
void show_cou(void){
    int h;
    if(j == -1){
        printf("\n还没有录入信息!\n");
        system("pause");
        system("cls");
        cou_operate();
    }
    system("cls");
    printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
    printf("\n\t-------------------------------------------------------------"); 
    for(h = 0;h <= j;h++){
        printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
    }
    //
    fflush(stdin);
    printf("\n\t1.修改");
    printf("\n\t2.删除"); 
    printf("\n\t3.返回");
    printf("\n\n  选择要进行的操作:");
    int flag;
    fflush(stdin);
    scanf("%d",&flag);
    switch(flag){
        case 1:
            edit_cou();
            break; 
        case 2:
            delete_cou();
            break;
        default:
            system("cls");
            cou_operate();
            break;
            
    } 
}
/*编辑课程信息*/
void edit_cou(void){
    printf("\n输入需要编辑的课程号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= j;h++){
        if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行 
            system("cls");
            printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期");
            printf("\n\t-------------------------------------------------------------"); 
            printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time);
            printf("\n这是修改前的数据,请依次输入修改值:\n\t");
            fflush(stdin);
            scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time);
            int k;
            for(k = 0;k <= j;k++){
                if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){
                    if(k==h){
                        continue;
                    } else {//课程号不唯一 
                        printf("\n此课程号已存在,重新输入:");
                        fflush(stdin);
                        scanf("%s",&cou[h].course_ID);
                        k = -1;
                    }
                }
            }
            /*将修改信息写入文件*/
            //思想:将原文件重新写入一遍
            renew_cou();
            system("cls");
            printf("修改成功!\n");
            system("pause"); 
            system("cls");
            cou_operate();
        }
    }
    printf("\n此课程号不存在!\n");
    system("pause");
    system("cls");
    cou_operate();
}
/*删除课程信息*/
void delete_cou(void){
    printf("\n输入需要编辑的课程号:");
    char id[10];
    getchar();
    scanf("%s",id);
    int h;
    for(h = 0;h <= j;h++){
        if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行 
            system("cls");
            //如果只有一条记录
            if(j==0){
                j = -1;
                renew_cou();
                printf("修改成功!\n");
                system("pause"); 
                system("cls");
                cou_operate();
            }
            //查看是否有人选课
            if(cou[h].people!=0){//有人选课时
                int a;
                for(a = 0;a <= x;a++){
                    if(sel[a].c == h){
                        delete_sel(a);
                        a = -1;
                        x--;
                        continue;
                    }
                }
            }
            int k;
            for(k = h+1;k <= j;k++,h++){//将数组直接向前移动 
                strcpy(cou[h].course_ID,cou[k].course_ID); 
                strcpy(cou[h].course_name,cou[k].course_name); 
                strcpy(cou[h].property,cou[k].property); 
                strcpy(cou[h].period,cou[k].period); 
                strcpy(cou[h].credit,cou[k].credit); 
                strcpy(cou[h].time,cou[k].time); 
            }
            /*将修改信息写入文件*/
            //思想:将原文件重新写入一遍
            renew_cou();
            j--;
            system("cls");
            printf("修改成功!\n");
            system("pause"); 
            system("cls");
            cou_operate();
        }
    }
    printf("\n此课程号不存在!\n");
    system("pause");
    system("cls");
    cou_operate();
}

//--功能函数
/*更新系统数据至文件*/
void renew_stu(void){
    FILE * fp;
    fp = fopen("student.txt","w+");
    if(fp == NULL){
        printf("\n打开文件失败,无法保存至文件。\n");
        fclose(fp);
        return ;
    }
    fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
    if(i == -1){
        fclose(fp);
        return;
    }
    int h;
    for(h = 0;h <= i;h++){
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
    }
    fclose(fp);
    
} 
void renew_cou(void){
    FILE * fp;
    fp = fopen("course.txt","w+");
    if(fp == NULL){
        printf("\n打开文件失败,无法保存至文件。\n");
        fclose(fp);
        return ;
    }
    fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
    if(j == -1){
        fclose(fp);
        return;
    }
    int h;
    for(h = 0;h <= j;h++){
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);    }
    fclose(fp);
    
}

  • 18
    点赞
  • 44
    收藏
  • 打赏
    打赏
  • 3
    评论
学生选课管理系统 --意义-- 学生选课系统是一个学校不可缺少的部分,它的内容对于学校的决策者和管 理者来说都至关重要,所以学生选课系统应该能够为用户提供充足的信息和快捷 的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式 存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据, 这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深 刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对选课信息进行管理,有着手工管理 所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、 存储量大、保密性好、 寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率,也是企业的 科学化、正规化管理,与世界接轨的重要条件。 --课题的可行性分析-- (1) 技术可行性-----本系统仅需要一台装有 Windows/Linux 系统并装有 Mysql数据库和Tomcat服务器的计算机即可,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求。对于软件技术要求,现在的JAVA程序设计语言已非常成熟,本系统采用基于B/S 架构的JavaEE的WEB开发,页面采用CSS样式,Jsp,Javascript等页面技术。 (2) 经济可行性-----由于本系统是一个基于JavaEE的WEB应用,所以服务器端只需部署一台能运行JAVA程序的服务器软件(Tomcat),即可使用本系统,系统成本主要集中在系统软件的开发上,当系统投入运行后可以为学校节约大量的人力,物力。所带来的效益远远大于系统软件的开发成本。在经济上完全可行。 (3) 操作可行性-----界面设计时充分考虑管理人员的习惯,使得操作简单;数据录入迅速、规范、可靠;统计准确;适应力强;容易扩充。 --使用功能模块说明-- (1)登录模块 通过列表框可以分别选择学生、教师和管理员三种用户类型,根据不同的用户类型,登录后会进入不同的管理模块 (2)系统管理员模块 ● 选课时间设置 系统管理员通过此项功能设置选课时间段—预选时间段和补选时间段,只有在选课时间段里,学生才可以选择课程,不在此时间段,学生不能进行选课操作。 ● 选修课程管理 管理员可以进行添加新的选修课、删除选修课、修改选修课和查找选修课等操作 添加新的选修课 在选课之前,管理员可以添加新的选修课,让学生在选课期间进行选修 删除选修课 在选课之前,管理员可以取消某门选修课 修改选修课 在选课之前,管理员可以修改某门选修课的信息 查找选修课 可以根据教师的员工号精确查找该教师所代选修课,也可以根据教师名称和课程名模糊查询选修课,不输入查询条件可以查询所有选修课。针对查询出的某门选修课,可以查看代课老师的信息和选修该课程的所有学生信息。在查看学生信息页面可以修改学生的课程成绩 ● 密码管理 可以对学生、教师和管理员的密码进行修改,通过单选框确定要修改密码的用户类型 (3)教师模块 ● 查看所代课程 教师用户登陆系统后,可以查看所代课程的列表,可以查看某门课程的全体学生的信息并能录入学生的成绩,成绩可分批录入,录入后可显示提交按钮,进行学生成绩的提交,提交之前必须确认填写的学生成绩无误,否则提交之后教师就无法修改学生的成绩,必须通过管理员进行修改学生的成绩 ● 修改密码 教师可以修改自己的密码 (4)学生选课模块 ● 选择选修课程 学生登陆系统后,在所有选修课程中可以选择两门选修课。只有在选课时间段内才可以使用该功能。在预选阶段,该功能完成选修课程的预选,学生可以选择所有选修课程,预选结束之后,系统开始正选。对超过XX课程计划招生人数的课程,系统自动进行抽签,确定哪些学生选课成功,哪些学生选课没有成功。选课不成功的可以进行补选。在补选阶段,该功能完成选修课程的补选,补选采用竞争机制,系统会罗列出所有未满的课程,让学生进行补选。 ● 查看学分 本功能完成学生对以前选修课程的成绩和所获学分的查看 ● 修改密码 学生可以修改自己的密码 ● 查看已选课程 选课开始之后,学生可以通过查看已选课程,了解本学期所选的选修课的信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

un1verses

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值