#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#define N 20
struct xk//定义选课信息
{
int num;//课程编号
char name[20];//课程名称
char xz[10];//课程性质
int zks;//总课时
int ks;//授课课时
int syks;//实验或上机课时
int xf;//学分
int kk;//开课学期
}kc[N];//总共20门课程
struct xsxx//学生信息
{
int xsnum[N];//选的课程编号
int xuefen; //学分
}xs;
struct xkjl//记录信息
{
char name[20];//记录名称
int jlxf;//记录学分
}jl[N];
void lr()//录入模块
{
FILE *fp;
int i,n;
struct xk kc[N];
fp=fopen("d:\\kcxx.txt","ab+");
if(fp==NULL){
printf("Can not open file\n");
exit(1);
}
printf("输入几门课程信息\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("第%d门课程编号\t第%d门课程名称\t第%d门课程性质\t第%d门总课时\t第%d门授课学时\t第%d门实验或上机学时\t第%d门学分\t第%d门开课学期\n",i+1,i+1,i+1,i+1,i+1,i+1,i+1,i+1);
scanf("%d%s%s%d%d%d%d%d",&kc[i].num,kc[i].name,kc[i].xz,&kc[i].zks,&kc[i].ks,&kc[i].syks,&kc[i].xf,&kc[i].kk);//输出课程信息
}
fwrite(kc,sizeof(struct xk),n,fp);//将键盘上的信息录入文件
fclose(fp);
}
void ll()//浏览模块
{
FILE *fp;
int i;
struct xk kc[N];
fp=fopen("d:\\kcxx.txt","rb");
if(fp==NULL){
printf("Can not open file\n");
exit(1);
}
printf("课程编号\t课程名称\t课程性质\t总课时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
for(i=0;(!feof(fp));i++){
fread(&kc[i],sizeof(struct xk),1,fp);
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",kc[i].num,kc[i].name,kc[i].xz,kc[i].zks,kc[i].ks,kc[i].syks,kc[i].xf,kc[i].kk);//输出课程信息
}
fclose(fp);
}
void xfcx()//学分查询模块
{
FILE *fp;
struct xk kc[N];
int i,n;
fp=fopen("d://kcxx.txt","rb");
if(fp==NULL){
printf("Can not open file\n");
exit(1);
}
printf("输入学分\n");
scanf("%d",&i);
for(n=0;!feof(fp);n++){
fread(&kc[n],sizeof(struct xk),1,fp);
if(i==(kc[n].xf))
{
printf("课程编号\t课程名称\t课程性质\t总课时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",kc[n].num,kc[n].name,kc[n].xz,kc[n].zks,kc[n].ks,kc[n].syks,kc[n].xf,kc[n].kk);//输出课程信息
}
}
fclose(fp);
}
void xzcx()//性质查询模块
{
FILE *fp;
struct xk kc[N];
int n=0;
char i[20];
fp=fopen("d://kcxx.txt","rb");
if(fp==NULL){
printf("Can not open file\n");
exit(1);
}
printf("输入课程性质\n");
scanf("%s",i);
while(!feof(fp)){//for(n=0;!feof(fp);n++){
fread(&kc[n],sizeof(struct xk),1,fp);
if(!(strcmp(i,kc[n].xz)))
{
printf("课程编号\t课程名称\t课程性质\t总课时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",kc[n].num,kc[n].name,kc[n].xz,kc[n].zks,kc[n].ks,kc[n].syks,kc[n].xf,kc[n].kk);//输出课程信息
n++;
}
}
fclose(fp);
}
void cx()//查询模块
{
int i;
printf("1、学分查询,2、课程性质查询\n");
scanf("%d",&i);
switch(i)
{
case 1:xfcx();//进入学分查询
break;
case 2:xzcx();//进入性质查询
break;
default:printf("输入有误,重新输入。\n");
}
}
void xsxk()//学生选课
{
FILE *fp;
struct xk kc[N];
struct xsxx xs;
struct xkjl jl[N];
fp=fopen("d:\\kcxx.txt","rb");
int n=0,i,j;
if(fp==NULL){
printf("Can not open file\n");
exit(1);
}
while(!feof(fp)){//for(n=0;!feof(fp);n++){
fread(&kc[n],sizeof(struct xk),1,fp);
n++;
}
xs.xuefen=0;
for(n=0;n<N;n++){
jl[n].jlxf=0;
printf("请输入课程名称\n");
loop:scanf("%s",jl[n].name);
for(i=0;!feof(fp);i++){
if(!(strcmp(jl[n].name,kc[i].name))){
jl[n].jlxf=kc[i].xf;
xs.xsnum[n]=kc[i].num;
break;
}
}
if(!feof(fp)){
printf("课程不存在,请重新输入!\n");
goto loop;
}
for(i=0;i<n;i++){
if(xs.xsnum[n]==xs.xsnum[i]){
printf("输入有重复,请重新输入。\n");
goto loop;
}
}
xs.xuefen+=jl[n].jlxf;
if(xs.xuefen>60){
printf("选课成功!\n");
break;
}
}
printf("课程编号\t课程名称\t课程性质\t总课时\t授课学时\t实验或上机学时\t学分\t开课学期\n");
for(j=0;j<=n;j++){
for(i=0;i<N;i++){
if(xs.xsnum[j]==kc[i].num){
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",kc[i].num,kc[i].name,kc[i].xz,kc[i].zks,kc[i].ks,kc[i].syks,kc[i].xf,kc[i].kk);//输出课程信息
}
}
}
fclose(fp);
}
void main()//主菜单
{
int i;
while(1){
printf(" 学生选课系统 \n");
printf(" 1、课程信息的录入 2、课程信息的浏览 3、查询课程 4、学生选课 \n");
scanf("%d",&i);
switch(i)
{
case 1:lr();
break;
case 2:ll();system("pause");
break;
case 3:cx();system("pause");
break;
case 4:xsxk();system("pause");
break;
default:printf("输入有误!\n");
}
system("cls");
}
}
艾晓健
箭与玫瑰