當前位置:成語大全網 - 漢語詞典 - 用C語言寫壹個學生選課系統

用C語言寫壹個學生選課系統

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

int N1,N2,kk1,kk2,kk3

結構couse * head 1;

struct student * head2

structure house//課程信息結構

{

int num 1;

char name 1[20];

int分數;

int nelepeo//為該課程選擇的人數

int Melepeo//課程中的最大學生人數

struct couse * next

};

結構學生//學生信息結構

{

int num2

char name 2[20];

int nel enum[50];//選擇的課程編號

int nelen//選擇的課程數量

結構學生*下壹個;

};

無效毫秒()

{

for(kk 1 = 0;kk 1 & lt;1100;kk1++)

for(kk2 = 0;kk2 & lt1200;kk2++)

for(kk3 = 0;kk3 & lt1200;kk3++);

}

Void keyboardc()//進入課程子功能(從鍵盤)

{

結構課程*p1,* p2

n 1 = 0;

p 1 = p2 =(struct couse *)malloc(sizeof(struct couse));

Printf("課程編號\t課程名稱\t學分\t課程的最大學生人數\ n ");

scanf("%d%s%d%d ",& ampp 1->;num1,p 1->;name1。p 1->;分數& ampp 1->;mele peo);

p 1->;nele peo = 0;

head 1 = NULL;

while(p 1->;num1!=0)

{

n 1 = n 1+1;

if(n 1 = = 1)head 1 = p 1;

否則p2-& gt;next = p 1;

p2 = p 1;

p 1 =(struct couse *)malloc(sizeof(struct couse));

scanf("%d%s%d%d ",& ampp 1->;num1,p 1->;name1。p 1->;分數& ampp 1->;mele peo);

p 1->;nele peo = 0;

}

p2->;next = NULL

}

Void filec()//輸入鍵盤子函數(來自文件)

{

FILE * fp

char file path[20];

結構課程*p1,* p2

n 1 = 0;

Printf("輸入要讀入的文件路徑:");

getchar();

獲取(文件路徑);

if((fp=fopen(filepath," r))= = NULL)

{

Printf("找不到%s文件!\n ",文件路徑);

退出(0);

}

p 1 = p2 =(struct couse *)malloc(sizeof(struct couse));

fscanf(fp," %d%s%d%d%d ",& ampp 1->;num1,p 1->;name1。p 1->;分數& ampp 1->;內爾佩奧& ampp 1->;mele peo);

head 1 = NULL;

而(!feof(fp))

{

n 1 = n 1+1;

if(n 1 = = 1)head 1 = p 1;

否則p2-& gt;next = p 1;

p2 = p 1;

p 1 =(struct couse *)malloc(sizeof(struct couse));

fscanf(fp," %d%s%d%d%d ",& ampp 1->;num1,p 1->;name1。p 1->;分數& ampp 1->;內爾佩奧& ampp 1->;mele peo);

}

p2->;next = NULL

}

Void inputc()//進入課程的主函數。

{

int I;

printf(" \ t \ t \ t輸入課程信息\ n ");

Printf("\n1。從鍵盤輸入\ n ");

Printf("2。來自文件的輸入\ n ");

Printf("3。返回主菜單\ n ");

Printf("請選擇(1 ~ 3):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

case(1):keyboard c();打破;

案例(2):filec();打破;

案例(3):破;

}

}

void insertrc(struct Course * in Course)//課程管理子功能(添加課程)

{

結構課程*p0,*p1,* p2

p 1 = head 1;

p0 =不壹致;

if(head1==NULL)

{

head 1 = P0;

P0->;next = NULL

}

其他

{

而((P0-& gt;num 1 & gt;p 1->;num 1);& amp(p 1->;下壹個!=NULL))

{

p2 = p 1;

p 1 = p 1->;接下來;

}

如果(P0-& gt;num 1 & lt;= p 1->;num1)

{

if(head 1 = = p 1)head 1 = P0;

否則p2-& gt;next = p0

P0->;next = p 1;

}

其他

{

p 1->;next = p0

P0->;next = NULL

}

}

n 1 = n 1+1;

}

Void delc(int num1)//課程管理子函數(刪除課程)

{

結構課程*p1,* p2

if(head1==NULL)

{

printf(" \ n沒有課程,所以不能刪除!\ n ");

轉到結尾;

}

p 1 = head 1;

while(num1!= p 1->;num1。& ampp 1->;下壹個!=空)

{

p2 = p 1;

p 1 = p 1->;接下來;

}

if(num 1 = = p 1->;num1)

{

if(p 1 = = head 1)head 1 = p 1-& gt;接下來;

否則p2-& gt;next = p 1->;接下來;

Printf("編號課程已刪除!\ n ");

n 1 = n 1-1;

}

Else printf("沒有這個號的課程!\ n ");

結束:;

}

Void managementc()//課程管理的主要功能

{

struct couse * incouse

int i,num 1;

printf(" \ t \ t \ t課程管理\ n ");

Printf("1。新課程\ n”);

Printf("2。刪除課程\ n ");

Printf("3。返回主菜單\ n ");

Printf("請選擇(1 ~ 3):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

案例(1):

{

incouse =(struct couse *)malloc(sizeof(struct couse));

Printf("課程編號\t課程名稱\t學分\t課程的最大學生人數\ n ");

scanf("%d%s%d%d ",& ampincouse->;num1,incouse->name1。incouse->;分數& ampincouse->;mele peo);

incouse->;nele peo = 0;

insertc(incouse);

打破;

}

情況(2):

{

Printf("請輸入要刪除的課程編號:\ n ");

scanf("%d ",& ampnum 1);

delc(num 1);

打破;

}

案例(3):破;

}

}

Void keyboards()//用於輸入學生信息的子函數(從鍵盤)

{

int I;

struct student *p1,* p2

N2 = 0;

p1=p2=(結構學生*)malloc(sizeof(結構學生));

Printf("學生ID \學生姓名\ n ");

scanf("%d%s ",& ampp 1->;num2,p 1->;name 2);

p 1->;nelen = 0;

for(I = 0;我& lt20;i++)p 1->;nel enum[I]= 0;

head2 = NULL

while(p 1->;num2!=0)

{

N2 = N2+1;

if(N2 = = 1)head 2 = p 1;

否則p2-& gt;next = p 1;

p2 = p 1;

p1=(結構學生* )malloc(sizeof(結構學生));

scanf("%d%s ",& ampp 1->;num2,p 1->;name 2);

p 1->;nelen = 0;

for(I = 0;我& lt20;i++)p 1->;nel enum[I]= 0;

}

p2->;next = NULL

}

Void files()//輸入學生信息的子函數(從文件輸入)

{

int I = 0;

FILE * fp

char file path[20];

struct student *p1,* p2

N2 = 0;

Printf("輸入要讀入的文件路徑:");

getchar();

獲取(文件路徑);

if((fp=fopen(filepath," r))= = NULL)

{

Printf("找不到%s文件!\n ",文件路徑);

退出(0);

}

p1=p2=(結構學生*)malloc(sizeof(結構學生));

fread(p1,sizeof(struct student),1,FP);

head2 = NULL

而(!feof(fp))

{

I = 0;

N2 = N2+1;

if(N2 = = 1)head 2 = p 1;

否則p2-& gt;next = p 1;

p2 = p 1;

p1=(結構學生* )malloc(sizeof(結構學生));

fread(p1,sizeof(struct student),1,FP);

}

p2->;next = NULL

}

Void inputs()//輸入學生信息的主函數

{

int I;

printf(" \ t \ t \ t輸入學生信息\ n ");

Printf("\n1。從鍵盤輸入\ n ");

Printf("2。來自文件的輸入\ n ");

Printf("3。返回主菜單\ n ");

Printf("請選擇(1 ~ 3):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

case(1):鍵盤();打破;

案例(2):files();打破;

案例(3):破;

}

}

void inserts(struct Student * in course)//學生信息管理子功能(添加學生信息)

{

結構學生*p0,*p1,* p2

p 1 = head 2;

p0 =不壹致;

if(head2==NULL)

{

head2 = p0

P0->;next = NULL

}

其他

{

而((P0-& gt;num2 & gtp 1->;num 2)& amp;& amp(p 1->;下壹個!=NULL))

{

p2 = p 1;

p 1 = p 1->;接下來;

}

如果(P0-& gt;num2 & lt= p 1->;num2)

{

if(head 2 = = p 1)head 2 = P0;

否則p2-& gt;next = p0

P0->;next = p 1;

}

其他

{

p 1->;next = p0

P0->;next = NULL

}

}

N2 = N2+1;

}

voidless(int num 2)//學生信息管理子函數(刪除學生信息)

{

struct student *p1,* p2

if(head2==NULL)

{

printf(" \ n沒有該學生的信息,不能刪除!\ n ");

轉到結尾;

}

p 1 = head 2;

而(num2!= p 1->;num2 & amp& ampp 1->;下壹個!=空)

{

p2 = p 1;

p 1 = p 1->;接下來;

}

if(num 2 = = p 1->;num2)

{

if(p 1 = = head 2)head 2 = p 1-& gt;接下來;

否則p2-& gt;next = p 1->;接下來;

Printf("學生信息已刪除!\ n ");

N2 = N2-1;

}

Else printf("沒有這個學號的同學!\ n ");

結束:;

}

void management()//學生信息管理的主要功能

{

struct student * incouse

int i,num2

printf(" \ t \ t \ t學生信息管理";

Printf("1。添加學生信息\ n”);

Printf("2。刪除學生信息\ n”);

Printf("3。返回主菜單\ n ");

Printf("請選擇(1 ~ 3):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

案例(1):

{

incouse =(struct student *)malloc(sizeof(struct student));

incouse->;nelen = 0;

incouse->;nel enum[0]= 0;

Printf("學生ID \學生姓名\ n ");

scanf("%d%s ",& ampincouse->;num2,incouse-& gt;name 2);

插入物(內部);

打破;

}

情況(2):

{

Printf("請輸入要刪除的學生的學號:\ n ");

scanf("%d ",& ampnum 2);

dels(num 2);

打破;

}

案例(3):破;

}

}

Void elect(struct student * s)//課程選擇

{

結構課程* p;

int num1,I;

Printf("請輸入所選課程的編號:\ n ");

scanf("%d ",& ampnum 1);

for(I = 0;s-& gt;nelenum[i]!=0;i++);

s-& gt;nel enum[I]= num 1;

(s->;nelen)++;

p = head 1;

while(p->;num1!= num 1)p = p-& gt;接下來;

(p->;nelepeo)++;

}

Void cheak()//學生選課子函數(查詢選修課)

{

char e;

結構課程* c;

結構學生* s;

int num2,I,j=0,t = 0;

Printf("請輸入妳的學號:");

scanf("%d ",& ampnum 2);

s = head2

while(s->;num2!= num2 & amp& amps-& gt;下壹個!= NULL)s = s-& gt;接下來;

if(s-& gt;num2!=num2)

{

Printf("您的信息不存在,請在主菜單中輸入您的信息!\ n ");

轉到結尾;

}

c = head 1;

Printf("妳的可選課程號:\ n ");

而(c!=空)

{

for(t=0,I = 0;s-& gt;nelenum[i]!=0;i++)

{

if(c->;num 1 = = s-& gt;nel enum[I])t = 1;

}

if(t = = 0 & amp;& amp(c->;內爾皮歐。= c->;Melepeo))

{

printf("%d\n ",c-& gt;num 1);

j++;

}

c = c->;接下來;

}

如果(j==0)

{

Printf("您已經選擇了所有課程,不能再選擇更多!\ n ");

轉到結尾;

}

Printf("選課(y/n)?:\ n ");

getchar();

e = getchar();

I = 0;

while(e=='y ')

{

選舉人;

Printf("繼續選課(y/n)"?:\ n ");

getchar();

e = getchar();

}

結束:;

}

Void back(struct student * p)//退出類。

{

結構課程* p 1;

int num1,I,j;

Printf("請輸入您要返回的課程編號:\ n ");

scanf("%d ",& ampnum 1);

p 1 = head 1;

while(p 1->;num1!= num 1)p 1 = p 1->;接下來;

for(I = 0;p->;nelenum[i]!= num 1;i++);

for(j = I;p->;nelenum[j]!=0;j++)p-& gt;nel enum[j]= p-& gt;nel enum[j+1];

p->;nel enum[-j]= 0;

(p 1->;nele peo)-;

Printf("成功退課!\ n ");

}

Void hcheak()//學生選課子函數(查詢所選課程)

{

char c;

結構課程* p0

struct student * p;

int num2,I,f = 0;

Printf("請輸入妳的學號:\ n ");

scanf("%d ",& ampnum 2);

p = head2

while(p->;num2!= num2 & amp& ampp!= NULL)p = p-& gt;接下來;

if(p==NULL)

{

Printf("您的信息不存在,請返回主菜單輸入信息:\ n ");

轉到結尾;

}

Printf("所選課程編號:\ n ");

如果(p->;nelenum[0]==0)

{

Printf("妳還沒選課程呢!\ n ");

轉到結尾;

}

for(I = 0;p->;nelenum[i]!=0;i++)

{

printf("%d\n ",p-& gt;nel enum[I]);

P0 = head 1;

而(p0->num1!= p->;nel enum[I])P0 = P0-& gt;接下來;

f = f+P0-& gt;分數;

}

Printf("總積分:%d\n ",f);

Printf("妳想退學嗎(y/n)?");

getchar();

c = getchar();

while(c=='y ')

{

背部(p);

Printf("繼續退學(y/n)?");

getchar();

c = getchar();

(p->;nelen)-;

}

結束:;

}

void selective()//學生選課主函數

{

int I;

printf(" \ t \ t \ t學生選擇課程\ n ");

Printf("1。查詢選修課\ n ");

Printf("2。查詢所選課程\ n ");

Printf("3。返回主菜單\ n ");

Printf("請輸入(1 ~ 3):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

case(1):cheak();打破;

案例(2):HCH eak();打破;

案例(3):破;

}

}

void lisc()//輸出課程信息

{

結構課程* p;

p = head 1;

Printf("課程編號,課程名稱,學分課程選學人數\ n ");

而(p!=空)

{

printf(" %-8d % 10s % 6d % 8d % 12d \ n ",p-& gt;num1,p->name1,p->得分,p-& gt;nelepeo,p-& gt;mele peo);

p = p-& gt;接下來;

}

}

Void lists()//輸出學生信息

{

struct student * p;

p = head2

Printf("按學號和學名選擇的課程數\ n ");

而(p!=空)

{

printf("%-4d %10s %6d\n ",p-& gt;num2,p-& gt;name2,p-& gt;nelen);

p = p-& gt;接下來;

}

}

Void intoc()//存儲課程信息。

{

FILE * fp

結構課程* p;

char file path[30];

Printf("輸入保存課程信息的文件路徑:");

getchar();

獲取(文件路徑);

if((fp=fopen(filepath," w))= = NULL)

{

printf(" \ n保存失敗!");

退出(0);

}

p = head 1;

而(p!=空)

{

fprintf(fp," %d %s %d %d %d\n ",p-& gt;num1,p->name1,p->得分,p-& gt;nelepeo,p-& gt;mele peo);

p = p-& gt;接下來;

}

fclose(FP);

Printf("課程信息已保存在%s!\n ",文件路徑);

}

Void intos()//存儲學生信息。

{

FILE * fp

struct student * p;

char file path[30];

Printf("輸入保存學生信息的文件路徑:");

getchar();

獲取(文件路徑);

if((fp=fopen(filepath," w))= = NULL)

{

printf(" \ n保存失敗!");

退出(0);

}

p = head2

而(p!=空)

{

fwrite(p,sizeof(struct student),1,FP);

p = p-& gt;接下來;

}

fclose(FP);

Printf("學生信息已保存在%s!\n ",文件路徑);

}

Void into()//存儲信息

{

int I;

Printf("1。存儲課程信息\ n ");

Printf("2。存儲學生信息\ n ");

Printf("3。返回主菜單\ n ");

Printf("請輸入(1 ~ 3)\ n ");

scanf("%d ",& ampI);

開關(壹)

{

case(1):intoc();打破;

情況(2):intos();打破;

案例(3):破;

}

}

Void store()//信息主函數

{

int I;

printf(" \ t \ t系統信息查看和存儲\ n ");

Printf("1。查看課程信息\ n ");

Printf("2。查看學生信息\ n ");

Printf("3。店鋪信息\ n ");

Printf("4。返回主菜單\ n ");

Printf("請輸入(1 ~ 4):\ n ");

scanf("%d ",& ampI);

開關(壹)

{

case(1):listc();打破;

情況(2):lists();打破;

情況(3):into();打破;

情況(4):破;

}

}

Int main()//主函數

{

int I;

開始:

printf(" \ n \ t \ t \ t歡迎使用學生選課系統!\ n ");

printf(" menu:\ n ");

Printf("1。輸入課程信息\ n ");

Printf("2。課程管理\ n ");

Printf("3。輸入學生信息\ n ");

Printf("4。學生信息管理\ n ");

Printf("5。學生選課\ n ");

Printf("6。系統信息查看和存儲\ n ");

Printf("7。退出系統\ n ");

printf(" \ n請輸入壹個菜單選項(1 ~ 7):\ n ");

scanf("%d ",& ampI);

如果(我& lt1 | | I & gt;7)

{

Printf("輸入錯誤,請重新輸入:\ n ");

轉到開始;

}

開關(壹)

{

案例(1):

{

系統(“cls”);

inputc();

轉到開始;

打破;

}

情況(2):

{

系統(“cls”);

management c();

轉到開始;

打破;

}

情況(3):

{

系統(“cls”);

inputs();

轉到開始;

打破;

}

案例(4):

{

系統(“cls”);

management s();

轉到開始;

打破;

}

案例(5):

{

系統(“cls”);

選修();

轉到開始;

打破;

}

案例(6):

{

系統(“cls”);

store();

轉到開始;

打破;

}

案例(7):

{

系統(“cls”);

Printf("感謝使用這個系統!\n\n再見!\ n ");

}

}

return(0);

}