C语言如何实现学生选修课程系统设计
作者
这篇文章将为大家详细讲解有关C语言如何实现学生选修课程系统设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
本文实例为大家分享了C语言学生选修课程系统的具体代码,供大家参考,具体内容如下
代码:
/* *Verson:2.0(basic) * *History:完成课程信息的录入,查询等操作;完成选课功能(2017-05-0520:30:00-01:20:00) * *Author:universes * * *********************************/ /* *Verson:1.9 * *History:完成了学生信息的查询操作(2017-05-0422:00:32-01:11:00) * *Author:universes * * ********************************/ /* *Verson:1.5 * *HIstory2:添加查重功能(2017-05-0223:39:19-01:06:05) *History1:完成了用户对课程和学生信息的添加操作(没有查重功能)(2017-05-0222:06:13-23:39:19) * *Author:universes * * ********************************/ /* *Verson:1.0 * *History:完成了用户的选择功能框架(2017-04-1922:06:13-22:40:47) * *Author:universes * * ********************************/ #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> #defineSIZE_STU10 #defineSIZE_COU10 #defineSIZE_SEL10 //////////////函数声明部分 voidhome(void); voidstu_operate(void); voidcou_operate(void); voidstatistic(void); voidchoose(void); voiddelete_sel(int); //--学生信息部分: voidinput_stu(void); voidsearch_stu(void); voidsearch_stu_id(void); voidsearch_stu_name(void); voidshow_stu(void); voidedit_stu(void); voidrenew_stu(void); voiddelete_stu(void); //--课程信息部分: voidinput_cou(void); voidsearch_cou(void); voidsearch_cou_id(void); voidsearch_cou_name(void); voidshow_cou(void); voidedit_cou(void); voidrenew_cou(void); voiddelete_cou(void); /*学生信息结构体*/ structstudent_info{ charstu_ID[9]; charstu_name[5]; charsex[9]; charage[9]; charcollage[9]; chargrade[9]; charcontact[9]; }stu[SIZE_STU]; /*课程信息结构体*/ structcourse_info{ charcourse_ID[9]; charcourse_name[9]; charproperty[9]; charperiod[9]; charcredit[9]; chartime[9]; intpeople; }cou[SIZE_COU]; /*选课记录结构体*/ structselect{ ints;//存放学生信息的数组下标 intc;//存放课程信息的数组下标 }sel[SIZE_SEL]; //全局变量i,j,x分别是学生,课程,选课信息数组下标 inti=-1; intj=-1; intx=-1; intmain(void){ //进入欢迎界面 home(); return0; } //欢迎界面 voidhome(void){ printf("\n-------------------------欢迎进入选课系统!----------------------"); inth; printf("\n\n请选择你要进行的操作:"); printf("\n\n1.学生操作"); printf("\n2.课程操作"); printf("\n3.开始选课"); printf("\n4.选课统计"); printf("\n5.退出系统"); printf("\n"); printf("\n请输入:"); scanf("%d",&h); system("cls"); switch(h){ case1: stu_operate(); break; case2: cou_operate(); break; case3: choose(); break; case4: statistic(); break; default: system("cls"); printf("BYE!"); break; } } /*开始选课*/ voidchoose(void){ charstu_id[10],cou_id[10]; printf("\n-------------------------欢迎进入选课系统!----------------------"); //输入选课学生信息 printf("\n\n请输入选课人学号:"); fflush(stdin); scanf("%s",stu_id); inth,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(); } /*删除选课记录*/ voiddelete_sel(intq){//删除第q+1条记录 /*注意!本函数没有将x减1,请在函数外手动减1(考虑外层函数循环的需要)*/ inth; cou[sel[q].c].people--; for(h=q;q<x;h++){ q++; sel[h].c=sel[q].c; sel[h].s=sel[q].s; } } //对学生记录进行操作 voidstu_operate(void){ printf("\n-------------------------欢迎进入选课系统!----------------------"); printf("\n\n请选择你要对学生记录进行的操作:"); printf("\n\n1.添加"); printf("\n2.查询"); printf("\n3.显示"); printf("\n4.返回主页面"); printf("\n"); printf("\n请输入:"); inti; scanf("%d",&i); system("cls"); switch(i){ case1://添加学生信息 input_stu(); break; case2://查询学生信息 search_stu(); break; case3://显示所有学生信息 show_stu(); break; case4: home(); break; } } //对课程记录进行操作 voidcou_operate(void){ printf("\n-------------------------欢迎进入选课系统!----------------------"); printf("\n\n请选择你要对课程记录进行的操作:"); printf("\n\n1.添加"); printf("\n2.查询"); printf("\n3.显示"); printf("\n4.返回主页面"); printf("\n"); printf("\n请输入:"); inti; scanf("%d",&i); system("cls"); switch(i){ case1: input_cou(); break; case2: search_cou(); break; case3: show_cou(); case4: home(); break; } } //选课信息统计记录 voidstatistic(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); intm; 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(); } } //--------------------------------------学生信息插入-------------------------------------- voidinput_stu(void){ charflag; 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); //--数据查重 inth; 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(); } /*查询学生信息*/ voidsearch_stu(void){ system("cls"); printf("\n请选择查询方式:"); printf("\n1.学号查询"); printf("\n2.姓名查询"); printf("\n请选择:"); inth; scanf("%d",&h); switch(h){ case1: search_stu_id(); break; case2: search_stu_name(); break; } } /*学号查询*/ voidsearch_stu_id(void){ system("cls"); charid[9]; printf("\n输入学生的学号:"); fflush(stdin); scanf("%s",id); inth; 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(); } /*姓名查询*/ voidsearch_stu_name(void){ system("cls"); charname[9]; printf("\n输入学生的姓名:"); fflush(stdin); scanf("%s",name); inth; 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(); } /*显示所有学生信息*/ voidshow_stu(void){ inth; 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选择要进行的操作:"); intflag; fflush(stdin); scanf("%d",&flag); switch(flag){ case1: edit_stu(); break; case2: delete_stu(); break; default: system("cls"); stu_operate(); break; } } /*编辑学生信息*/ voidedit_stu(void){ printf("\n输入需要编辑的学生的学号:"); charid[10]; getchar(); scanf("%s",id); inth; 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); intk; 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(); } /*删除学生信息*/ voiddelete_stu(void){ printf("\n输入需要编辑的学生的学号:"); charid[10]; getchar(); scanf("%s",id); inth; for(h=0;h<=i;h++){ if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行 system("cls"); //检查他/她是否选课了 inta; 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(); } intk; 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(); } //--------------------------------------课程信息插入-------------------------------------- voidinput_cou(void){ charflag; 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); //--数据查重 inth; 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(); } /*查询课程信息*/ voidsearch_cou(void){ system("cls"); printf("\n请选择查询方式:"); printf("\n1.课程号查询"); printf("\n2.课程名查询"); printf("\n请选择:"); inth; scanf("%d",&h); switch(h){ case1: search_cou_id(); break; case2: search_cou_name(); break; } } /*课程号查询*/ voidsearch_cou_id(void){ system("cls"); charid[9]; printf("\n输入课程号:"); fflush(stdin); scanf("%s",id); inth; 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(); } /*课程名查询*/ voidsearch_cou_name(void){ system("cls"); charname[9]; printf("\n输入课程名:"); fflush(stdin); scanf("%s",name); inth; 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(); } /*显示所有课程信息*/ voidshow_cou(void){ inth; 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选择要进行的操作:"); intflag; fflush(stdin); scanf("%d",&flag); switch(flag){ case1: edit_cou(); break; case2: delete_cou(); break; default: system("cls"); cou_operate(); break; } } /*编辑课程信息*/ voidedit_cou(void){ printf("\n输入需要编辑的课程号:"); charid[10]; getchar(); scanf("%s",id); inth; 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); intk; 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(); } /*删除课程信息*/ voiddelete_cou(void){ printf("\n输入需要编辑的课程号:"); charid[10]; getchar(); scanf("%s",id); inth; 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){//有人选课时 inta; for(a=0;a<=x;a++){ if(sel[a].c==h){ delete_sel(a); a=-1; x--; continue; } } } intk; 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(); } //--功能函数 /*更新系统数据至文件*/ voidrenew_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; } inth; 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); } voidrenew_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; } inth; 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); }
关于“C语言如何实现学生选修课程系统设计”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
目录
推荐阅读
-
C/C++如何获取CAN信号
-
C语言怎么通过二分查找实现猜数字游戏
-
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
-
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
-
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
-
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
-
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
-
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
-
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...
-
C语言中常用的头文件是什么
C语言中常用的头文件是什么这篇文章主要介绍“C语言中常用的头文件是...