空中社区

首页 » 〓〓娱乐地带〓〓 » ┫数码风云┣ » 编程与项目开发 » c语言课程设计(学生选课信息管理系统)
yangyy753 - 2008-9-17 21:59:00
以下是我们小组的C语言课程设计,虽然可以运行但是还是有许多的不足和BUG,所以请各位高手帮忙给一点意见和建议,或者帮我们修改一下,在此谢谢啦~

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

struct choose{

int stu_num;

int cou_num;

char time[15];}cho[160];

struct student{

char name[10];

int number;

int class_num;

int al;

}stu[40];

struct course{

char name[8];

char tea_name[10];

int number;

int score;

int al;

}cou[10];

int count_stu=0,count_cou=0,count_cho=0;

int main()

{

void menu();

void menu_stu();

void menu_cou();

void attention();

void new_stu();

void new_cou();

void new_choose_1();

void new_choose_2();

void new_choose();

void del_stu();

void del_cou();

void del_choose_1();

void del_choose_2();

void del_choose();

void change_stu();

void change_cou();

void check_stu();

void check_cou();

void scan_stu();

void scan_cou();

void scan_cho();

menu();

return 0;

}

void new_stu() /*增加学生*/

{

int i,n;

FILE *fp;

if(count_stu>40)


{


clrscr();


printf("the database for students is full,cannot add more student!");


menu_stu();


}

if((fp=fopen("student","ab+"))==NULL)


{


printf("\ncannot open file!\n");


menu_stu();


return;


}

printf("please input the student's number:\n");

scanf("%d",&n);

for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


if(stu.number==n)


{


clrscr();


printf("\n\tthis student already exist!\n");


fclose(fp);


menu_stu();


}


}

printf("%-10s%-10s\n","name","class_num");

scanf("%s%d",stu[count_stu].name,&stu[count_stu].class_num);

stu[count_stu].number=n;

fflush(fp);

if(fwrite(&stu[count_stu],sizeof(struct student),1,fp)==1)


count_stu++;

else


{


printf("\n\tfile write error!");


fclose(fp);


menu_stu();


return;


}

fclose(fp);

clrscr();

printf("Add Successfully!\n");

menu_stu();

}

void new_cou()/*增加科目*/

{

int i,n;

FILE *fp;

if(count_cou>9)


{


printf("the database for courses is full,cannot add more courses!\n");


menu_cou();


return;


}

fp=fopen("course","ab+");

if(fp==NULL)


{


printf("\n\tcannot open file!\n");


menu_cou();


return;


}

printf("please input the course's number:\n");

scanf("%d",&n);

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


if(cou.number==n)


{


clrscr();


printf("\n\t\tthis course already exist!");


fclose(fp);


menu_cou();


}


}

printf("%-10s%-10s%-10s\n","name","teacher","score");

scanf("%s%s%d",cou[count_cou].name,cou[count_cou].tea_name,&cou[count_cou].score);

cou[count_cou].number=n;

fflush(fp);

if(fwrite(&cou[count_cou],sizeof(struct course),1,fp)==1)


count_cou++;

else


{


printf("\n\tfile write error!");


fclose(fp);


menu_cou();


return;


}

fclose(fp);

clrscr();

printf("Add Successfully!\n");

menu_cou();

}

void change_stu()/*学生信息修改*/

{

int n,i;

FILE *fp;

fp=fopen("student","rb+");

if(fp==NULL)


{


printf("cannot open file!\n");


menu_stu();


return;


}

printf("please input the student's number you want change:\n");

scanf("%d",&n);

for(i=0;i<count_cou;i++)


{


fread(&stu,sizeof(struct course),1,fp);


if(stu.number==n)


break;


}

if(stu.number!=n)


{


clrscr();


printf("\n\tthe student doesn't exist!\n");


fclose(fp);


menu_stu();/*
要跳转到学生管理菜单*/


}

else


{


printf("please re_input the student's information:\n");


printf("%-10s%-10s:\n","name","class");


scanf("%s%d",stu.name,&stu.class_num);


}

fflush(fp);

if((fwrite(&stu,sizeof(struct student),1,fp))!=1)


{


clrscr();


printf("\n\twrite file error!\n");


fclose(fp);


return;


}

else


{


clrscr();


printf("Change Successfully!\n");


}

fclose(fp);

menu_stu();

}

void change_cou()/*课程修改*/

{

int i,n;

FILE *fp;

fp=fopen("course","rb+");

if(fp==NULL)


{


printf("cannot open file!\n");


return;


}

printf("please input the number of the course you want to change:\n");

scanf("%d",&n);

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


if(cou.number==n)


break;


}

if(cou.number!=n)


{


clrscr();


printf("\n\t\tthe course doesn't exist!\n\n");


fclose(fp);


menu_cou();/*
要跳转到课程管理菜单*/


}

else


{


printf("please reinput the course's information:\n");


printf("%-10s%-10s%-10s:\n","name","teacher","score");


scanf("%s%s%d",cou.name,cou.tea_name,&cou.score);


cou.number=n;


}

fflush(fp);

if((fwrite(&stu,sizeof(struct student),1,fp))!=1)


{


clrscr();


printf("file write error!");


fclose(fp);


menu_cou();


}

fclose(fp);

clrscr();

menu_cou();

}

void scan_stu()/*学生信息浏览*/

{

int i;

FILE *fp;

if((fp=fopen("student","rb"))==NULL)


{


printf("Error!\n");


menu_stu();


}

printf("all students' informations:\n");

printf("%-10s%-10s%-10s%-10s\n","name","number","class","course_num");

for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


printf("%-10s%-10d%-10d%-10d\n",stu.name,stu.number,stu.class_num,stu.al);


}

fclose(fp);

menu_stu();

}

void scan_cou()/*课程浏览*/

{

int i;

FILE *fp;

if((fp=fopen("course","rb"))==NULL)


{


printf("Error!\n");


menu_cou();


}

printf("all courses' informations:\n");

printf("%-10s%-10s%-10s%-10s%-10s\n","name","teacher","number","score","people_num");

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


printf("%-10s%-10s%-10d%-10d%-10d\n",cou.name,cou.tea_name,cou.number,cou.score,cou.al);


}

fclose(fp);

menu_cou();

}

void check_stu()/*学生信息查询*/

{


int i,j,flag=0;


FILE *fp;


printf("Please input your number:");


scanf("%d",&j);


if((fp=fopen("student","rb"))==NULL)


{


printf("Error!\n");


menu_stu();


}


else


for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


if(strcmp(stu.number,j)==0)


{


printf("Student select course informations:\n");


printf("%-10s%-10s%-10s%-10s\n","name","number","class","course_num");


for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


printf("%-10s%-10d%-10d%-10d\n",stu.name,stu.number,stu.class_num,stu.al);


}


flag=1;


}


}


if(flag==0)


{


printf("No found this student!");


}


fclose(fp);


menu_stu();

}

void check_cou()/*课程信息查询*/

{


int i,j,flag=0;


FILE *fp;


printf("please input course's number:\n");


scanf("%d",&j);


if((fp=fopen("course","rb"))==NULL)


{


printf("Error!\n");


menu_cou();


}


else


for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct student),1,fp);


if(strcmp(cou.number,j)==0)


{


printf("Course select informations:\n");


printf("%-10s%-10s%-10s%-10s\n","name","teacher","number","score","people_num");


for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


printf("%-10s%-10s%-10d%-10d%-10d\n",cou.name,cou.tea_name,cou.number,cou.score,cou.al);


}


flag=1;


}


}


if(flag==0)


{


printf("No found this course!");


}


fclose(fp);


menu_cou();

}

void new_choose_1(int n)/*选课子函数*/

{

int i;

FILE *fp;

fp=fopen("student","rb+");

if(fp==NULL)


{


printf("cannot open the file!\n");


return;


}

for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


if(stu.number==n)


break;


}

if(i==count_stu)


{


clrscr();


printf("sorry,we donnot have your information now !\n");


printf("\nplease goto the student manager to add your information!\n");


fclose(fp);


menu_stu();/*
返回菜单*/


}

else


{


stu.al++;


fflush(fp);


if((fwrite(&stu,sizeof(struct student),1,fp))!=1)


{


clrscr();


printf("file write error!\n");


fclose(fp);


return;


}


}

fclose(fp);

clrscr();

menu_cho();

}

void new_choose_2(int n)/*选课子函数*/

{

int i;

FILE *fp;

fp=fopen("course","rb+");

if(fp==NULL)


{


printf("cannot open file!\n");


return;


}

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


if(cou.number==n)


break;


}

if(cou.al>10)


{


printf("this course is full!\n");


fclose(fp);


menu_cou();/*
返回到上一句选课菜单*/


}

else


{


cou.al++;


fflush(fp);


if((fwrite(&cou,sizeof(struct course),1,fp))!=1)


{


clrscr();


printf("file write error!\n");


fclose(fp);


return;


}


}

clrscr();

fclose(fp);

}

void new_choose()/*选课*/

{int i,n;

FILE *fp;

if((fp=fopen("choose","ab+"))==NULL)


{


printf("cannot open file!\n");


return;


}

printf("please input your
number:\n");

scanf("%d",&n);

new_choose_1(n);

cho[count_cho].stu_num=n;

printf("all courses:\n");

scan_cou();

printf("please input the number of the course you want to choose:\n");

scanf("%d",&i);

new_choose_2(i);
/*
内部有跳转标志*/

cho[count_cho].cou_num=i;

printf("please input the time:\n");

scanf("%s",cho[count_cho].time);

if(fwrite(&cho[count_cho],sizeof(struct choose),1,fp)==1)


{


count_cho++;


printf("Choose successfully!\n");


}

else


{


printf("file write error!\n");


clrscr();


fclose(fp);


return;


}

fclose(fp);

clrscr();

menu_cho();

}

void del_choose_1(int n)/*退课子函数*/

{

int i;

FILE *fp;

if((fp=fopen("course","rb+"))==NULL)


{


printf("cannot open the file!\n");



return;


}

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp);


if(cou.number==n)


{


fflush(fp);


if((fwrite(&cou,sizeof(struct course),1,fp))!=1)


{


clrscr();


printf("file write error!\n");


fclose(fp);


return;


}


else


cou.al--;


}


}

fclose(fp);

}

void del_choose_2(int n)/*退课子函数*/

{

int i;

FILE *fp;

if((fp=fopen("student","rb+"))==NULL)


{


printf("cannot open the file!\n");


return;


}

printf("%-10s%-10s%-10s%-10s\n","name","number","class","course_num");

for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp);


if(stu.al==0)


{


clrscr();


fclose(fp);


printf("you haven't chose any courses!\n");


menu_cho();


}


if(stu.number==n)


{


printf("%-10s%-10d%-10d%-10d\n",stu.name,stu.number,stu.class_num,stu.al);


fflush(fp);


if((fwrite(&stu,sizeof(struct student),1,fp))!=0)


{


clrscr();


printf("file write error!\n");


fclose(fp);


return;


}


else



stu.al--;


}


}

fclose(fp);

}

void del_choose()/*退课函数*/

{

int i,n,m,k;

FILE *fp;

if((fp=fopen("choose","rb+"))==NULL)


{


printf("cannot open file!\n");


return;


}

if(count_cho==0)


{


clrscr();


printf("not people have chose any courses!\n");


menu_cho();


}

printf("please input your number:\n");

scanf("%d",&i);

del_choose_2(i);

printf("please choose the course you do not want:\n");

scanf("%d",&n);

del_choose_1(n);

for(m=0;m<count_cho;m++)


{


fread(&cho[m],sizeof(struct choose),1,fp);


if(cho[m].cou_num==n)


if(cho[m].stu_num==i)


{


for(k=m;k<count_cho;k++)


cho[m]=cho[m+1];


count_cho--;


}


}

clrscr();

printf("Delete Succcessfully!\n");

fclose(fp);

menu_cho();/*跳转到 choose manager
菜单*/

}

void scan_cho()/*浏览所有数据*/

{

int i,j,k;

FILE *fp1,*fp2,*fp3;

if((fp1=fopen("student","rb"))==NULL||(fp2=fopen("course","rb"))==NULL||(fp3=fopen("choose","rb"))==NULL)


{


printf("cannot open the file!\n");


return;


}

printf("all data:\n");

printf("%10s%10s%10s%10s%10s%10s%10s%10s\n","stu_name","stu_number","class_num","course_al","cou_name","tea_name","score","time");

for(i=0;i<count_cho;i++)


{


fread(&cho,sizeof(struct choose),1,fp3);


for(j=0;j<count_stu;j++)


{


fread(&stu[j],sizeof(struct student),1,fp1);


if(cho.stu_num==stu[j].number)


for(k=0;k<count_cou;k++)


{



fread(&cou[k],sizeof(struct course),1,fp2);


if(cho.cou_num==cou[k].number)


printf("%10s%10d%10d%10d%10s%10s%10d%10s\n",stu[j].name,stu[j].number,stu[j].class_num,stu[j].al,cou[k].name,cou[k].tea_name,cou[k].score,cho.time);


}



}


}

fclose(fp1);

fclose(fp2);

fclose(fp3);

clrscr();

menu_cho();/*跳转到 choose manager 菜单*/

}

void del_cou() /*删除课程*/

{

int i,n,k;

FILE *fp1,*fp2;

fp1=fopen("course","rb+");

fp2=fopen("choose","rb+");

if((fp1==NULL)||(fp2==NULL))


{


printf("\n\tcannot open the file!\n");


menu_cou();


return;


}

printf("please input the number of the course you do not want:\n");

scanf("%d",&n);

for(i=0;i<count_cou;i++)


{


fread(&cou,sizeof(struct course),1,fp1);


if(cou.number==n)


{


for(k=i;k<count_cou;k++)


cou=cou[i++];


count_cou--;


break;


}


}

fclose(fp1);

for(i=0;i<count_cho;i++)


{


fread(&cho,sizeof(struct choose),1,fp2);


if(cho.cou_num==n)


{


for(k=i;k<count_cho;k++)


cho=cho[i++];


count_cho--;


}


}

fclose(fp2);

printf("Move Successfully!\n");

menu_cou();/*跳转到菜单 course manager*/

}

void del_stu()/*删除学生*/

{

int i,n,k;

FILE *fp1,*fp2;

if((fp1=fopen("student","rb+"))==NULL||(fp2=fopen("choose","rb+"))==NULL)


{


printf("cannot open file!\n");


return;


}

printf("please input the number of the student you want to move:\n");

scanf("%d",&n);

for(i=0;i<count_stu;i++)


{


fread(&stu,sizeof(struct student),1,fp1);


if(stu.number==n)


{


for(k=i;k<count_stu;k++)


stu=stu[i+1];


count_stu--;


break;


}


}

fclose(fp1);

for(i=0;i<count_cho;i++)


{


fread(&cho,sizeof(struct choose),1,fp2);


if(cho.stu_num==n)


{


for(k=i;k<count_cho;k++)


cho=cho[i++];


count_cho--;


}


}

fclose(fp2);

clrscr();

printf("\n\t\tMove Successfully!\n");

menu_cho();/*跳转到choose manager菜单*/

}

void menu()

{

char judge,ch;

printf("\t\t*******************************************************\n");

printf("\t\t*******
MAIN MENU
************\n");

printf("\t\t*******************************************************\n"


"\t\t*
a :student manager
*\n"


"\t\t*
b :course manager
*\n"


"\t\t*
c :choose manager
*\n"


"\t\t*

d :attentions
*\n"


"\t\t*
e :quit
*\n"


"\t\t*******************************************************\n");

printf("\nplease input your choice:\n");

scanf("%c",&judge);

while((ch=getchar())!='\n');

if(judge=='a')


{


clrscr();


menu_stu();


}


else if(judge=='b')


{


clrscr();


menu_cou();


}


else if(judge=='c')


{



clrscr();


menu_cho();


}


else if(judge=='d')


{


clrscr();


attention();


}


else if(judge=='e')



{


clrscr();


printf("\n\n\tTHANK YOU FOR USING!\n");


exit(1);


}


else


{


clrscr();


printf("\n\t\twrong code!\n\t\tplease inut again!\n");


menu();


}

}

void menu_stu()

{

char judge,ch;

printf("\t\t*******************************************************\n");

printf("\t\t*******
STUDENT MENU
************\n");

printf("\t\t*******************************************************\n"


"\t\t*
a :new student
*\n"


"\t\t*
b :move student
*\n"


"\t\t*
c :change student
*\n"


"\t\t*
d :scan student
*\n"


"\t\t*
e :check student
*\n"


"\t\t*
f :back to main menu
*\n"


"\t\t*******************************************************\n");

printf("\nplease input your choice:\n");

scanf("%c",&judge);

/*

while(judge>'f'||judge<'a')

{


printf("wrong code!\nplease input your choice:\n");


scanf("%c",&judge);

}*/

while((ch=getchar())!='\n');

if(judge=='a')


{


clrscr();


new_stu();


}


else if(judge=='b')


{


clrscr();


del_stu();


}


else if(judge=='c')


{


clrscr();


change_stu();


}


else if(judge=='d')


{


clrscr();


scan_stu();


}


else if(judge=='e')



{


clrscr();


check_stu();


}


else if(judge=='f')


{


clrscr();


menu();


}


else


{



clrscr();


printf("\n\t\twrong code!\n\t\tplease inut again!\n");


menu_stu();


}

}

void menu_cou()

{

char judge,ch;

printf("\t\t*******************************************************\n");

printf("\t\t*******
COURSE MENU
************\n");

printf("\t\t*******************************************************\n"


"\t\t*
a :new course

*\n"


"\t\t*
b :move course
*\n"


"\t\t*
c :change course
*\n"


"\t\t*
d :scan course
*\n"


"\t\t*
e :check course
*\n"


"\t\t*
f :back to main menu
*\n"


"\t\t*******************************************************\n");

printf("\nplease input your choice:\n");

scanf("%c",&judge);


/*while(judge>'f'||judge<'a')


{


printf("wrong code!\n");


printf("please input your choice:\n");


judge=getchar();


}*/

while((ch=getchar())!='\n');


if(judge=='a')


{


clrscr();


new_cou();


}


else if(judge=='b')


{


clrscr();


del_cou();


}


else if(judge=='c')


{


clrscr();


change_cou();


}


else if(judge=='d')


{



clrscr();


scan_cou();


}


else if(judge=='e')


{


clrscr();


check_cou();


}


else if(judge=='f')


{


clrscr();


menu();


}


else


{


clrscr();


printf("\n\t\twrong code!\n\t\tplease inut again!\n");


menu_cou();


}

}

int menu_cho()

{

char judge,ch;

printf("\t\t*******************************************************\n");

printf("\t\t*******
CHOOSE MENU
************\n");

printf("\t\t*******************************************************\n"


"\t\t*
a :new choice
*\n"


"\t\t*
b :change choice
*\n"


"\t\t*
c :scan all chioces
*\n"


"\t\t*

d :back to main menu
*\n"


"\t\t*******************************************************\n");

printf("\nplease input your choice:\n");

scanf("%c",&judge);

/*


while(judge>'d'||judge<'a')


{


printf("wrong code!\n");


printf("please input your choice:\n");


scanf("%c",&judge);


}*/

while((ch=getchar())!='\n');

if(judge=='a')


{


clrscr();


new_choose();


}


else if(judge=='b')


{


clrscr();


del_choose();


}


else if(judge=='c')


{


clrscr();


scan_cho();


}


else if(judge=='d')


{


clrscr();


menu();


}


else


{


clrscr();


printf("\n\t\twrong code!\n\t\tplease inut again!\n");


menu_cho();


}

return 0;

}

void attention()

{

printf("\t\t***************************************************************\n");

printf("\t\t*****************>>>>> ATTENTIONS <<<<<<***********************\n");

printf("\t\t*
1.40 students limited!
*\n");

printf("\t\t*
2.10 courses limited!
*\n");

printf("\t\t*
3.one student can only choose 4 courses
*\n");

printf("\t\t*
4.one course can only be chose by 16 students
*\n");

printf("\t\t*
5.all data saved in computer,so do not worry about losing*\n");

printf("\t\t*
6.made by >>>GROUP 8<<<
*\n");

printf("\t\t***************************************************************\n\n\n");

menu();

}

星琴 - 2008-9-17 22:02:00
LZ能把源文件直接打包发上来么。。。
这样看好累的说
ioao - 2008-9-18 8:15:00
许久不碰c了
wuha - 2008-9-18 8:59:00
直从过了二级就没有学过C了

现在都直接汇编的咯 `~
Dr.Choosen - 2008-9-18 10:23:00
OMG
强人,好长。。。。
计算机紧急响应组 - 2008-10-2 9:04:00
帖代码的时候不要直接复制上来,改成下面这样
[ c o d e ]你的代码[/code]

去掉空格

这样就会是下面的效果

class Base
{
protected:
    int m_a;
public:
    Base(int a):m_a(a){}
};


计算机紧急响应组 - 2008-10-2 9:07:00
我用C++写了一个,可以参考一下
http://www.ecjtu.org/forum/htm_data/59/0805/17676.html
1