當前位置:首頁 » 編程語言 » c語言學生選課管理系統
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言學生選課管理系統

發布時間: 2022-07-20 04:56:47

Ⅰ 學生選課系統c語言程序

根據自己的需要,自己看著修改一下 ^^
#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
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",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
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",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
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",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\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",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}

Ⅱ c語言,編寫學生選課系統代碼,不要錄入文件的

試試這個

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Person
{
char score; /*編號*/
char name[10]; /*姓名*/
char address[10]; /*住址*/
char workplace[10]; /*單位*/
char num[8]; /*固定電話*/
char mobile[11]; /*移動號碼*/
char sort[10]; /*分類*/
char Email[8]; /*E-mail*/
char QQ[10]; /*QQ*/

};

Person pe[80];

//登陸函數
void logon()
{printf("\n\n\n\t\t\t 通信錄管理\n\n");
printf("\n\n\n\n\n\t\t\t 2014年7月\n\n");
printf("\t\t\t 程序設計\n");
system("pause");
}
int menu_select()
{ char c;
logon();
do{
system("cls");
printf("\t\t *****檔案***** \n");
printf("\t\t┌───────┐\n");
printf("\t\t│ 1. 添加記錄 │\n");
printf("\t\t 2. 刪除記錄 │\n");
printf("\t\t│ 3. 查詢記錄 │\n");
printf("\t\t│ 4. 修改記錄 │\n");
printf("\t\t│ 5. 保存記錄 │\n");
printf("\t\t│ 0. 退出程序 │\n");
printf("\t\t└───────┘\n");
printf("\t\t請您選擇(0-5):");
c=getchar();
}while(c<'0'||c>'5');
return(c-'0');
}

int Input(Person per[],int n)
{
int i=0;
char sign,x[10];
while(sign!='n'&&sign!='N')
{
printf("\t編號:");
scanf("\t%d",&per[n+i].score);
printf("\t姓名:");
scanf("\t%s",per[n+i].name);
printf("\t電話號碼:");
scanf("\t%s",per[n+i].num);
printf("\t單位:");
scanf("\t%s",per[n+i].workplace);
printf("\tE-mail:");
scanf("\t%s",per[n+i].Email);
printf("\t住址:");
scanf("\t%s",per[n+i].address);
printf("\t移動手機:");
scanf("\t%s",per[n+i].mobile);
printf("\tQQ:");
scanf("\t%s",per[n+i].QQ);
printf("\t所屬類別:");
scanf("\t%s",per[n+i].sort);
gets(x);
printf("\n\t是否繼續添加?(Y/N)");
scanf("\t%c",&sign);
i++;
} //插入學生信息,插入一條學生信息之後,執行i++,繼續執行插入,直到不滿足循環條件
return(n+i);
}

int Delete_a_record(Person per[],int n)
{
char s[20];
int i=0,j;
printf("\t請輸入想刪除記錄中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n)
i++;
if(i==n)
{
printf("\t通訊錄中沒有此人!\n");
return(n);
}
for(j=i;j<n-1;j++)
{
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].workplace,per[j+1].workplace);
strcpy(per[j].Email,per[j+1].Email);
strcpy(per[j].address,per[j+1].address);
strcpy(per[j].QQ,per[j+1].QQ);
strcpy(per[j].mobile,per[j+1].mobile);
strcpy(per[j].sort,per[j+1].sort);
per[j].score=per[j+1].score;

} //刪除一條信息後,其後面的信息都要向前移一位
printf("\t\t\t已經成功刪除!\n");
return(n-1);
}
//查詢一條記錄
void Query_a_record(Person per[],int n)
{

int m;
printf("\t\n請選擇查詢方式:\n");
printf("\t┌─────- ┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------單位 │\n");
printf("\t│3------分類 │\n");
printf("\t│4------返回 │\n");
printf("\t└──────┘\n");
printf("請選擇:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{
printf("輸入錯誤,請重新選擇:");
scanf("%d",&m);
}

if(m==1)
{
char s[20];
int i=0;
printf("\t請輸入想查詢的姓名:");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t檔案中沒有此人!\n");
return;
}
printf("\t此人編號: %d\n",per[i].score);
printf("\t固定電話: %s\n",per[i].num);
printf("\t單位: %s\n",per[i].workplace);
printf("\tE-mail: %s\n",per[i].Email);
printf("\t此人QQ: %s\n",per[i].QQ);
printf("\t此人手機號: %s\n",per[i].mobile);
printf("\t此人分類: %s\n",per[i].sort);
} ;

if(m==2)
{
char s[20];
int i=0,k=0;
printf("\t請輸入想查詢的單位:");
scanf("\t%s",s);
for(i=0;i<n;i++){
if(strcmp(per[i].workplace,s)==0){
printf("\t此人編號: %d\n",per[i].score);
printf("\t姓名: %s\n",per[i].name);
printf("\t固定電話: %s\n",per[i].num);
printf("\tE-mail: %s\n",per[i].Email);
printf("\t此人QQ: %s\n",per[i].QQ);
printf("\t此人手機號: %s\n",per[i].mobile);
printf("\t此人分類: %s\n",per[i].sort);
printf("\n\n");
}

else
k++;
}
if(k==n)
{
printf("\t檔案中沒有此人!\n");
return;
}

} ;

if(m==3)
{
char s[20];
int i=0,k=0;
printf("\t請輸入想查詢的分類:");
scanf("\t%s",s);
for(i=0;i<n;i++){
if(strcmp(per[i].sort,s)==0){
printf("\t此人編號: %d\n",per[i].score);
printf("\t姓名: %s\n",per[i].name);
printf("\t固定電話: %s\n",per[i].num);
printf("\tE-mail: %s\n",per[i].Email);
printf("\t此人QQ: %s\n",per[i].QQ);
printf("\t此人手機號: %s\n",per[i].mobile);
printf("\t此人單位: %s\n",per[i].sort);
printf("\n\n");
}

else
k++;
}
if(k==n)
{
printf("\t檔案中沒有此人!\n");
return;
}

} ;
}
//修改記錄
void Change(Person per[],int n)
{
char s[20];
int i=0;
printf("\t請輸入想修改的記錄中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n)
i++;
if(i==n)
{
printf("\t檔案中沒有此人!\n");
return;
}
printf("\t編號:");
scanf("\t%d",&per[i].score);
printf("\t姓名:");
scanf("\t%s",per[i].name);
printf("\t電話號碼:");
scanf("\t%s",per[i].num);
printf("\t單位:");
scanf("\t%s",per[i].workplace);
printf("\tE-mail:");
scanf("\t%s",per[i].Email);
printf("\t住址:");
scanf("\t%s",per[i].address);
printf("\t移動手機:");
scanf("\t%s",per[i].mobile);
printf("\t所屬類別:");
scanf("\t%s",per[i].sort);
printf("\t修改成功!");
}
//寫入文件
void WritetoText(Person per[],int n)
{
int i=0;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t保存到文件\n"); /*輸入文件名*/
printf("\t請輸入所保存的文件名:");
scanf("\t%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\t無法打開文件\n");
system("pause");
return;
}
fprintf(fp,"******************************************通訊錄******************************************\n");
fprintf(fp,"編號 姓名 電話號碼 通信地址 電子郵箱\n");
fprintf(fp,"------------------------------------------------------------------------------------------\n");
while(i<n)
{
fprintf(fp,"%-3d\t%-6s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].num,per[i].workplace,per[i].Email);
i++;
}
fprintf(fp,"------------------------------------------------------------------------------------------\n");
fprintf(fp,"***************************************共有%d條記錄****************************************\n",n);
fclose(fp); /*關閉文件*/
printf("保存成功!\n");
}

/* 主函數*/
int main()
{
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n\t添加記錄到檔案\n");
n=Input(pe,n);
break;

case 2:
printf("\n\t從檔案中刪除記錄\n");
n=Delete_a_record(pe,n);
printf("\t");
system("pause");
break;

case 3:
printf("\n\t在檔案中查找記錄\n");
Query_a_record(pe,n);
printf("\t");
system("pause");
break;

case 4:
printf("\n\t修改檔案中的記錄\n");
Change(pe,n);
printf("\t");
system("pause");
break;

case 5:
printf("\n\t保存功能\n");
WritetoText(pe,n);
printf("\t");
system("pause");
break;

case 0:
printf("\n\t\t謝謝使用,再見!\n");
printf("\n\t\t");
system("pause");
exit(0); //退出程序
}
}
}

Ⅲ 學生選課管理系統 要求用c語言編寫最好不要用到鏈表

/*你把所有標記為「選題」的內容改為「選課」即可,用的不是鏈表,是隨機文件*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define szSTR 256
#define szNAME 10
#define szGROUP 5 /*每個小組最多允許5名組員,包括組長*/
#define fileAssignments "c:\\0.txt"
#define fileProjects "c:\\1.txt"
#define cntTYPE 4
/*題目*/
char Types[cntTYPE][11] = {"數據結構類", "趣味類", "管理類", "自選類"};
struct TAssignment {
int number; /*題目編號*/
int level; /*難度系數*/
int type; /*類別*/
char title[szSTR];
char requirements[szSTR]; /*技術要求*/
char features[szSTR]; /*技術特點*/
};

time_t Date_Input(char * msg)
{
struct tm t; memset(&t, 0, sizeof(t));
printf("請輸入%s日期,格式為年/月/日:", msg);
scanf("%d/%d/%d", &(t.tm_year), &(t.tm_mon), &(t.tm_mday));
t.tm_year -= 1900;
t.tm_mon --;
return mktime(&t);
}

void Date_Print(time_t t)
{
struct tm * ft = localtime(&t);
printf("%04d/%02d/%02d", ft->tm_year + 1900, ft->tm_mon + 1, ft->tm_mday);
}

void Number_Input(char * msg, int * x)
{
for(;;) {
printf("請輸入%s,以回車結束:", msg);
scanf("%d", x);
if(*x < 0) *x = -*x;
if(*x) break;
printf("錯誤的輸入,請重新輸入。\n");
}
}
void String_Input(char * msg, char * str)
{
printf("請輸入%s,以回車結束:", msg);
fflush(stdin);
fgets(str, szSTR, stdin);
}

int Type_Input(void)
{
int t = 0, i = 0;
for(;;) {
printf("請輸入題目類別:");
for(i = 0; i < cntTYPE; i++) printf("%d - %s\t", i, Types[i]);
printf("\b\n");
t = getch() - '0';
if(t >= 0 && t <= cntTYPE) break;
printf("錯誤的輸入\n");
}
return t;
}

fpos_t ASSG_Query(int number)
{
FILE * f = 0; fpos_t p = 0;
struct TAssignment a;
if(number < 1) return 0;
f = fopen(fileAssignments, "rb");
if(!f) {
fprintf(stderr, "題目文件無法打開\n");
return 0;
}
while(!feof(f)) {
fgetpos(f, &p);
fread(&a, sizeof(a), 1, f);
if(a.number == number) {
fclose(f);
return p + 1;
}
}
fclose(f);
return 0;
}

void ASSG_Append(void)
{
FILE * f = 0; fpos_t p = 0;
struct TAssignment a;
memset(&a, 0, sizeof(a));
Number_Input("題目編號", &(a.number ));
p = ASSG_Query(a.number );
if(p) {
fprintf(stderr, "該題目已存在。\n");
return ;
}
Number_Input("難度系數", &(a.level));
String_Input("題目名稱", a.title );
a.type = Type_Input();
String_Input("技術要求", a.requirements);
String_Input("技術特點", a.features);
f = fopen(fileAssignments, "ab");
if(!f) {
fprintf(stderr, "題目文件無法打開\n");
return ;
}
fwrite(&a, sizeof(a), 1, f);
fclose(f);
}

void ASSG_Delete(void)
{
fpos_t p = 0; FILE * f = 0;
struct TAssignment a;
Number_Input("題目編號", &(a.number ));
p = ASSG_Query(a.number );
if(p == 0) {
fprintf(stderr, "該題目不存在。\n");
return ;
}
p--;
f = fopen(fileAssignments, "rb+");
if(!f) {
fprintf(stderr, "題目文件無法打開!\n");
return ;
}
fsetpos(f, &p);
memset(&a, 0, sizeof(a));
fwrite(&a, sizeof(a), 1, f);
fclose(f);
printf("刪除成功!\n");
}

void PrintLine(void)
{
int i = 0; for(i=0; i<79; i++) putchar('-');
putchar('\n');
}
void ASSG_Report(void)
{
FILE * f = 0; struct TAssignment a; int r = 0;
f = fopen(fileAssignments, "rb");
if(!f) {
fprintf(stderr, "目前資料庫中沒有題目。\n");
return ;
}
printf("\n題目資料庫\n");
while(!feof(f)) {
r = fread(&a, sizeof(a), 1, f);
if(r < 1) break;
if(a.number == 0) continue;
PrintLine();
printf("【編號】%d\t【類別】%s\t【難度系數】%d\t【題目】%s【技術要求】%s【技術特點】%s",
a.number , Types[a.type ], a.level ,
a.title , a.requirements , a.features );
}
fclose(f);
printf("\n\n");
}

void ASSG_Brief(int number)
{
struct TAssignment a; FILE * f = 0;
fpos_t p = ASSG_Query(number);
if(!p) {
printf("【尚未選題】\n");
return ;
}
p--;
f = fopen(fileAssignments, "rb");
fsetpos(f, &p);
fread(&a, sizeof(a), 1, f);
fclose(f);
printf("【題目編號】%d【類別】%s【難度系數】%d\t【題目】%s",
a.number , Types[a.type ], a.level ,a.title );
}

int ASSG_Choose(void)
{
int number = 0; fpos_t p = 0;
Number_Input("題目編號", &number);
p = ASSG_Query(number);
return p?number:0;
}
void ASSG_Menu(void)
{
int cmd = 0;
for(;;) {
printf("*****題目管理*****\n0-查看\t1-新增\t2-刪除題目\t任意鍵返回\n");
cmd = getch() - '0';
switch(cmd) {
case 0: ASSG_Report(); break;
case 1: ASSG_Append(); break;
case 2: ASSG_Delete(); break;
default: return ;
}
}
}

/*項目信息*/
struct TProject {
int group_number; /*組號*/
char members[szGROUP][szNAME]; /*小組成員,編號0為組長*/
int assignment; /*選題*/
time_t date_open; /*開題日期*/
time_t date_close; /*結題日期*/
char teacher[szNAME];/*指導教師*/
int process; /*進度0~100%*/
char jobs[szSTR]; /*分工*/
int score; /*評分*/
};

void PROJ_Report(void)
{
struct TProject p; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) {
fprintf(stderr, "目前沒有開放項目信息。\n");
return;
}
printf("*****項目及小組信息*****\n");
while(!feof(f)) {
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number ==0) continue;
PrintLine();
printf("【組號】%d\t【指導教師】%s【組長】%s\n",
p.group_number , p.teacher , p.members[0]);
printf("【組員】%s %s %s %s\n", p.members[1], p.members[2], p.members[3], p.members[4]);
printf("【分工】%s", p.jobs );
ASSG_Brief(p.assignment );
if(p.assignment ) {
printf("【開題日期】"); Date_Print(p.date_open);
printf("【結題日期】"); Date_Print(p.date_close);
printf("【進度】%d%%【評分】%d\n", p.process, p.score );
}
}
fclose(f);
PrintLine();
}

fpos_t PROJ_Query(int number)
{
struct TProject p; fpos_t q = 0; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) return 0;
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number == number) {
fclose(f);
return q+1;
}
}
fclose(f);
return 0;
}

void PROJ_Append(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0; int i = 0;
memset(&p, 0, sizeof(p));
Number_Input("項目小組編號", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q) {
fprintf(stderr, "該小組已經存在。\n");
return ;
}
printf("請錄入組員信息,第一個組員是組長:");
for(i = 0; i< 5; i++) scanf("%s", p.members [i]);
printf("請輸入指導教師姓名:"); scanf("%s", p.teacher );
String_Input("分工信息", p.jobs );
f = fopen(fileProjects, "ab");
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("項目小組已創建,可以從菜單進行選題。\n");
}

void PROJ_Delete(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("項目小組編號", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "沒有關於該小組的信息。\n");
return ;
}
q--;
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("該小組信息已刪除!\n");
}

int PROJ_Invalid(int assignment)
{
struct TProject p; int sum = 0; int r = 0;
FILE * f = fopen(fileProjects, "rb");
if(!f) return 1;
while(!feof(f)) {
r = fread(&p, sizeof(p), 1, f);
if(r < 1) break;
if(p.group_number == 0) continue;
if(p.assignment == assignment) sum++;
}
fclose(f);
return sum<5?0:1;
}
void PROJ_Select(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0; time_t t = 0;
memset(&p, 0, sizeof(p));
Number_Input("項目小組編號", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "沒有關於該小組的信息。\n");
return ;
}
q--;
f = fopen(fileProjects, "rb");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
p.assignment = ASSG_Choose();
if(p.assignment==0) {
fprintf(stderr, "錯誤的題目編號。請在題庫中查證後重新選題\n");
return ;
}
if(PROJ_Invalid(p.assignment)) {
fprintf(stderr, "已經有5個小組選擇了該題目,請重新選題\n");
return ;
}
p.date_open = Date_Input("開題");
p.date_close= Date_Input("結題");
if(p.date_open > p.date_close) {
t = p.date_close ;
p.date_close = p.date_open;
p.date_open = t;
}
p.process = 0;
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
}

void PROJ_Progress(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("項目小組編號", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "沒有關於該小組的信息。\n");
return ;
}
q--;
f = fopen(fileProjects, "rb");
if(!f) {
fprintf(stderr, "資料庫無記錄!\n");
return ;
}
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
if(p.assignment < 1) {
fprintf(stderr, "尚未選題,請選題後再補登進度\n");
return ;
}
Number_Input("進度(0~100)", &(p.process ));
if(p.process <0 || p.process > 100) {
fprintf(stderr, "錯誤的進度\n");
return ;
}
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("進度已經登記完成!\n");
}

void PROJ_Evaluate(void)
{
struct TProject p; fpos_t q = 0; FILE * f = 0;
memset(&p, 0, sizeof(p));
Number_Input("項目小組編號", &(p.group_number));
q = PROJ_Query(p.group_number );
if(q == 0) {
fprintf(stderr, "沒有關於該小組的信息。\n");
return ;
}
q--;
f = fopen(fileProjects, "rb");
fsetpos(f, &q);
memset(&p, 0, sizeof(p));
fread(&p, sizeof(p), 1, f);
fclose(f);
if(p.assignment < 1) {
fprintf(stderr, "尚未選題,請選題後再進行評分\n");
return ;
}
Number_Input("評分(0~100)", &(p.score ));
if(p.score <0 || p.score > 100) {
fprintf(stderr, "錯誤的評分\n");
return ;
}
f = fopen(fileProjects, "rb+");
fsetpos(f, &q);
fwrite(&p, sizeof(p), 1, f);
fclose(f);
printf("成績已經評定完成!\n");
}

void PROJ_Menu(void)
{
int cmd = 0;
for(;;) {
printf("*****項目管理*****\n0-查看\t1-新增\t2-刪除\t3-選題\t4-登記進度\t5-打分\t任意鍵返回\n");
cmd = getch() - '0';
switch(cmd) {
case 0: PROJ_Report(); break;
case 1: PROJ_Append(); break;
case 2: PROJ_Delete(); break;
case 3: PROJ_Select(); break;
case 4: PROJ_Progress(); break;
case 5: PROJ_Evaluate(); break;
default: return ;
}
}
}

int main(void)
{
int cmd = 0;
for(;;) {
printf("*****歡迎使用學生實踐管理軟體*****\n0-題目管理\n1-項目管理\n其他任意鍵退出\n");
cmd = getch() - '0';
switch(cmd) {
case 0: ASSG_Menu(); break;
case 1: PROJ_Menu(); break;
default: return 0;
}
}
return 0;
}

Ⅳ 急求c語言:學生選課系統程序設計(最好含流程圖 的)

#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
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",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
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",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
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",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\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",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}

Ⅳ c語言編寫學生選課系統

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
//#include<iostream.h>
void clrscr(void)
{
system("cls");
}
char *getpass(char s[])
{
char *pass,ch;
int i;
pass=new char[100];
i=0;
pass[0]='\0';
printf("%s",s);
while(1)
{
ch=getch();
if(ch!=13)
{
printf("*");
pass[i]=ch;
i++;
pass[i]='\0';
}
else break;
}
//scanf("%s",pass);
return pass;
}
struct course
{
char name[20];
int score;
int students_limited;
course *pNext;
};

struct user
{
char name[20];
char password[17];
char coursename[20];
user *pNext;
};

int Login()
{
char key;

ST1:
clrscr();
printf("\n\n\n\n\n\n\n\t\t\tWelcome to Course System!");
printf("\n\n");
printf("\n\t\t\t1. Login with Administrator");
printf("\n\t\t\t2. Login with Users");
printf("\n\t\t\t0. Exit");
key=getch();

switch(key)
{
case '1' : return 1;
case '2' : return 2;
case '0' : return 0;
default : printf("\n\n\t\t\tInput wrong!\n\t\t\t\tPress any key to continue...");
getch();
goto ST1;
}
}

course *readcourse()
{
FILE *fp;
book *pHead,*pTemp,*pLast;

fp=fopen("coursemsg.dat","r");
if(fp==NULL)
{
printf("\n\n\t\t\tOpen course message file failed!");
return NULL;
}
pHead=NULL;
while(!feof(fp))
{
pTemp=new course;
if(fread(pTemp,sizeof(course),1,fp)!=1)
{
delete pTemp;
break;
}
if(pHead==NULL)
{
pHead=pTemp;
pLast=pTemp;
}
pLast->pNext=pTemp;
pTemp->pNext=NULL;
pLast=pTemp;
}//while
fclose(fp);
return pHead;
}

void writecoursetofile(course *pHead)
{
FILE *fp;
course *pTemp,*pNext;

fp=fopen("coursemsg.dat","w");
for(pTemp=pHead;pTemp;pTemp=pTemp->pNext)
fwrite(pTemp,sizeof(course),1,fp);
fclose(fp);
}

void Add_course()
{
course one,*p;
int i,j;
FILE *fp;

p=&one;
while(1)
{
clrscr();
printf("\n\n\n\n\n\n\n\n\t\tPlease input the name of course(-1 to end):");
//cin>>p->name;
scanf("%s",p->name);
if(!strcmp(p->name,"-1"))break;
i=0;
while(1)
{
if(p->name[i]=='\0')break;
else i++;
}
for(j=i;j<20;j++)p->name[j]='\0';
printf("\n\t\tInput it's scores:");
//cin>>p->score;
scanf("%d",&p->score);
fp=fopen("coursemsg.dat","a+");
fwrite(p,sizeof(course),1,fp);
fclose(fp);
printf("\n\n\t\tAdd course message OK!");
printf("\n\t\t\tPress any key to countinue...");
getch();
}
}

void Del_course()
{
course *pHead,*pNewHead,*pTemp,*pLast;
char name[20];

pHead=readcourse();
printf("\n\t\tPlease input the name of course to be delete:");
gets(name);

while(strcmp(pHead->name,name)==0)
{
pNewHead=pHead->pNext;
printf("\n\n\t\t--%s had been deleted" ,name);
delete pHead;
pHead=pNewHead;
}
for(pTemp=pHead,pLast=pHead;pTemp!=NULL;pLast=pTemp,pTemp=pTemp->pNext)
{
if(strcmp(pTemp->name,name)==0)
{
pLast->pNext=pTemp->pNext;
printf("\n\n\t\t--%s had been deleted" ,name);
delete pTemp;
pTemp=pLast;
}
}//for
writecoursetofile(pHead);
getch();
}

void course_Op()
{
char key;

ST3:
clrscr();
printf("\n\n\n\n\n\n\n\n\t\t\t\t1. Add Course");
printf("\n\t\t\t\t2. Delete Course");
printf("\n\t\t\t\t0. EXIT");
key=getch();
switch(key)
{
case '1' : Add_course();break;
case '2' : Del_course();break;
case '0' : goto _End;
default : printf("\n\tInput wrong!\n\tPress any key to continue...");
getch();
}
goto ST3;

_End:
;
}

void Add_user()
{
FILE *fp;
char name[20],*na,password[6],*pa;
int i,j;
user one,*p;

p=&one;
pa=password;
na=name;

while(1)
{
clrscr();
printf("\n\n\n\n\n\n\n\t\tPlease input user's name(-1 to end):");
gets(name);
if(!strcmp(name,"-1"))break;
pa=getpass("\n\t\tPlease input new password:");
strcpy(p->name,na);
strcpy(p->password,pa);
fp=fopen("usermsg.dat","ab+");
fwrite(p,sizeof(user),1,fp);
fclose(fp);
printf("\n\t\tuser's message has been saved!");
printf("\n\t\tPress any key to countinue...");
getch();
}
}
user *readcusmsg()
{
FILE *fp;
user *pHead,*pTemp,*pLast;

fp=fopen("usermsg.dat","rb");
if(fp==NULL)
{
printf("\n\nOpen user's message file failed");
return NULL;
}
pHead=NULL;

while(!feof(fp))
{
pTemp=new user;
if(fread(pTemp,sizeof(user),1,fp)!=1)
{
delete pTemp;
break;
}
if(pHead==NULL)
{
pHead=pTemp;
pLast=pTemp;
}
pLast->pNext=pTemp;
pTemp->pNext=NULL;
pLast=pTemp;
}//while
fclose(fp);
return pHead;
}

void writecusmsgtofile(user *pHead)
{
FILE *fp;
user *pTemp,*pNext;

fp=fopen("usermsg.dat","wb");
for(pTemp=pHead;pTemp;pTemp=pTemp->pNext)
fwrite(pTemp,sizeof(user),1,fp);
fclose(fp);
}

void user_Op()
{
char key;

ST4:
clrscr();
printf("\n\n\n\n\n\n\n\n\t\t\t\t1. Add Users");
printf("\n\t\t\t\t0. EXIT");
key=getch();

switch(key)
{
case '1' : Add_user();break;
case '0' : goto _End;
default : printf("\n\tInput wrong!\n\tPress any key to continue...");
getch();
}
goto ST4;

_End:;
}

void List_all_course()
{
course *pHead,*pTemp;
int Count=0,tense;

pHead=readcourse();
if(!pHead)
{
printf("\n\t(No data)");
exit(0);
}
printf("\n%30s%8s%10s","course name","Score","Tense");

for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
{
if(pTemp->n>0)tense=1;
else tense=0;
printf("\n%30s%8d%10d",pTemp->name,pTemp->score,tense);
Count++;
if(Count%20==0){printf("Press any key to countinue...");getch();}
}
getch();
}

void Search_course_name()
{
char name[20];
int tense,k=1;
book *pHead,*pTemp,*pNext;

printf("\n\tPlease input the name of the course you want to search:");
gets(name);
pHead=readcourse();
for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
if(!strcmp(pTemp->name,name))
{
if(pTemp->n>0)tense=1;
else tense=0;
k=0;
printf("\n%30s%8d%10d",pTemp->name,pTemp->score,tense);
}
if(k)
{
printf("\n\n\t\tThere's no course named %s",name);
printf("\n\t\t\tPress any key to countinue...");
}
getch();
}

void course_Search()
{
char key;

ST5:
clrscr();
printf("\n\n\n\n\n\n\t\t\t\t1. List all course");
printf("\n\t\t\t\t2. Search by the name of course");
printf("\n\t\t\t\t0. EXIT");
key=getch();

switch(key)
{
case '1' : List_all_course();break;
case '2' : Search_course_name();break;
case '0' : goto _End;
default : printf("\n\t\t\tInput wrong!\n\t\t\tPress any key to continue...");
getch();
}
goto ST5;

_End:;
}

void Pass(int Res)
{
FILE *fp;
char psw[17],*p,pass_in[17],user_name[20];
user *pHead,*pTemp;
int i,k=0;

clrscr();
p=pass;

if(Res==1)
{
if(!(fp=fopen("adm.psw","rb")))
{
printf("\n\n\n\n\n\n\n\t\tWelcome!\n\t******Login Administrator******");
p=getpass("\n\tPlease input your new password:");
fp=fopen("adm.psw","wb");
fprintf(fp,"%s",p);
fclose(fp);
}
else
{
fscanf(fp,"%s",pass_in);
fclose(fp);
printf("\n\n\n\n\n\n\t******Login by Administrator******");
p=getpass("\n\n\t\t\tPlease input your password:");
if(strcmp(p,pass_in))
{
printf("\n\t\tYour Password is wrong!");
printf("\n\t\tPress any key to EXIT...");
getch();
exit(0);
}//if_else
}
Adm_List();
}//if
else
{
printf("\n\n\n\n\n\n\n\n\t\t\t\tWelcome!");
printf("\n\t\t\t******Login by User******");
printf("\n\t\t\tPlease input your name:");
scanf("%s",user_name);
p=getpass("\n\t\t\tPlease input your password:");
pHead=reaser();
for(pTemp=pHead;pTemp!=NULL;pTemp=pTemp->pNext)
if(!strcmp(pTemp->name,user_name))
if(strcmp(pTemp->password,p))
{
k=1;
printf("\n\t\t\tYour password is wrong!");
printf("\n\t\t\t\tPress any key to EXIT...");
getch();
exit(0);
}//if_else
}//psw

int main()
{
int Res;

clrscr();
printf("\n\n\n\n\n\n\n\n");
printf("\n\t*****************************************************************");
printf("\n\t* courses System *");
printf("\n\t* *");
printf("\n\t* QiuYong No.20052419 *");
printf("\n\t* *");
printf("\n\t* 2006-7-20 *");
printf("\n\t*****************************************************************");
printf("\n\t\t\t\t\t\tPress any key to countinue...");
getch();

START:
Res=login();
if(Res==0)goto End;
else if(Res==3)Help();
else Psw(Res);
goto START;

End:
clrscr();
printf("\n\n\n\n\n\n\t\t\tGoodBye ^_^");
return 0;
}

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

#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
}
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",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1 > p1->num1) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1 <= p1->num1)
{
if(head1==p1) head1=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1->num1 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1) head1=p1->next;
else p2->next=p1->next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",&num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
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",&i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2 > p1->num2) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1->num2 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2) head2=p1->next;
else p2->next=p1->next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",&incouse->num2,incouse->name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!=0;i++);
s->nelenum[i]=num1;
(s->nelen)++;
p=head1;
while(p->num1!=num1) p=p->next;
(p->nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s->next!=NULL) s=s->next;
if(s->num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",&num1);
p1=head1;
while(p1->num1!=num1) p1=p1->next;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p1->nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",&num2);
p=head2;
while(p->num2!=num2 && p!=NULL) p=p->next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p->nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=head1;
while(p0->num1!=p->nelenum[i]) p0=p0->next;
f=f+p0->score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續退課(y/n)?");
getchar();
c=getchar();
(p->nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
p=p->next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
p=p->next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",&i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
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",&i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統!\n");
printf("菜單:\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",&i);
if(i<1 || i>7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統!\n\n再見!\n");
}
}
return(0);
}

Ⅶ c語言學生選修課程管理系統

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct student
{
char name[60];
char ID[7];
int score;
};int dq(struct student st[]);
void xianshi();
void bc(struct student st[]);
void add();
void select();
void zz();
void chazhao();
void xhcz();
void xmcz();
void del();
void xmsc();
void xhsc();
void tj();
void px();
void bjg();
void xg();
void xhxg();
void xmxg();
void bca();
void fh();
struct student st[300]; //這個數組用來保存所有的學生信息 和文件裡面的一致
int Number=0; //記錄總的學生人數 也就是數組/文件裡面的學生人數
void main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;

if((fp=fopen("C://student.dat","rb"))==NULL)
{
printf("\n=========>提示:文件不存在,是否要創建一個?(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{

//這里僅為了建立文件
fp=fopen("C://student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(st); //要是文件只能夠已經有數據 將數據初始化到數組中
}
system("cls");
while(true)
{
xianshi();
printf("\t\t====>請選擇:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);
//退出
break;
case 1: add();
fh();//增加學生成績
break;
case 2: select();
fh();//查看學生成績
break;
case 3: chazhao();
fh();// 查找
break;
case 4: del();
fh();//刪除
break;
case 5: tj();
fh();//統計
break;
case 6: px();
fh();//排序
break;
case 7: bjg();
fh();//輸出不及格
break;
case 8: xg();
fh();//修改
break;
case 9:zz();
fh();//作者
break;
case 10:bca();
fh();//保存

break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
void bca()
{
printf("\t=====程序在運行時已自動保存.....\n");
}
void fh()
{
printf("\t===>按Enter鍵返回主菜單\n");
}
void xg() //修改學生信息
{
int way=0;
printf("請選擇修改查找方式\n");
printf("1 按姓名查找修改\n");
printf("2 按學號查找修改\n");
scanf("%d",&way);
switch(way)
{
case 1: xmxg();
break;
case 2: xhxg();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
//按姓名修改
void xmxg()
{
FILE *fp=NULL;
char name[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score); //信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
}
void xhxg()//按學號修改
{
FILE *fp=NULL;
char id[60];
int i=0;
int changeIndex=0;
int index=0;
printf("請輸入要修改的學生學號:");
scanf("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID))
{
changeIndex=i; //保存要修改的人的下標
}
break;
}
printf("\t姓名\t學號\t成績\n");
printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
printf("請重新輸入該學生信息");
printf("姓名:");
scanf("%s",st[changeIndex].name);
printf("學號:");
scanf("%s",st[changeIndex].ID);
printf("成績:");
scanf("%d",&st[changeIndex].score);

//信息修改後重新更新文件裡面的數據 以保持數據一致性
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}void bjg() //輸出不及格人數
{
int i=0;
printf("以下是不及格:\n");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (st[i].score<60)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void px()//排序
{
struct student temp;
int wantNUmber=0;
int i=0;
int j=0;
for(i=0;i<Number-1;i++)
{
for(j=i;j<Number-1;j++)
{
if(st[j].score>st[j+1].score)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("你想輸出前幾名的成績:");
scanf("%d",&wantNUmber);
if (wantNUmber>Number)
{
wantNUmber=Number;
} printf("\t姓名\t學號\t成績\n");
for(i=0;i<wantNUmber;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void tj()//統計
{
int i=0;
double sum=0.0;
for(i=0;i<Number;i++)
{
sum+=st[i].score;
}
printf("全班總分為:%f\n",sum);
printf("平均分為:%f\n",sum/Number);
}
void del()//刪除
{
int n=0;
printf("1 按姓名刪除\n");
printf("2 按學號刪除\n");
scanf("%d",&n);
switch(n)
{
case 1: xmsc();
break;
case 2: xhsc();
break;
}
}
void xmsc()//按姓名刪除
{
FILE *fp=NULL;
char name[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
} //將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");

}
void xhsc()//按學號刪除
{
FILE *fp=NULL;
char id[60];
int i=0;
int j=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0) //如果查找到就刪除
{
for (j=i;j<Number-1;j++)
{
st[j]=st[j+1];
}
Number--;
}
}

//將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了
fp=fopen("C://student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&st[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("刪除成功;\n");
}
void chazhao()//查找學生
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按學號查找\n");
scanf("%d",&n);
switch(n)
{
case 1: xmcz();
break;
case 2: xhcz();
break;
default: printf("輸入有誤,結束!\n");
break;
}
}
void xhcz()//按學號查找
{
char id[7];
int i=0;
printf("請輸入要查找學生學號:");
scanf("%s",id);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,st[i].ID)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void xmcz()//按姓名查找
{
char name[7];
int i=0;
printf("請輸入要查找學生姓名:");
scanf("%s",name);
system("cls");
printf("\t姓名\t學號\t成績\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,st[i].name)==0)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
}
void zz()
{
printf("\t**********************************************************\n\n");
printf("\t^^^^^^^^^^ 武漢工程大學郵電與信息工程學院 ^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 07網路與安全管理2班 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^ 易樊製作 ^^^^^^^^\n\n");
printf("\t^^^^^^^^^ 禁止CTRL+C 謝謝合作 ^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^ QQ:895115828\n\n");
printf("\t**********************************************************\n\n");
}
void select()//查看學生
{
int i=0;
printf("以下是全部學生成績\n");
printf("\t姓名\t學號\t成績\n");
for(i=0;i<Number;i++)
{
printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
}
}
void add()//增加學生
{
int numberTemp=0;
int i=0;
struct student temp; //臨時保存信息
printf("請輸入要增加學生成績個數:");
scanf("%d",&numberTemp);
for(i=0;i<numberTemp;i++)
{
printf("輸入第%d個同學信息\n",i+1);
printf("姓名:");
scanf("%s",temp.name);
printf("學號:");
scanf("%s",temp.ID);
printf("成績:");
scanf("%d",&temp.score);
st[Number++]=temp; //將剛添加的寫入到數組
bc(&temp); //將剛添加的寫入到文件 }
printf("添加成功\n");
}
void bc(struct student *st)
{
FILE *fp=NULL;
fp=fopen("C://student.dat","ab+");
fwrite(st,sizeof(struct student),1,fp);
fclose(fp);
}
int dq(struct student st[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C://student.dat","rb");
while(fread(&st[i],sizeof(struct student),1,fp))
i++;
fclose(fp);
return i;
}
void xianshi()
{
printf("\t*****************************************************************\n");
printf("\t* *\n");
printf("\t* 學生成績管理系統 *\n");
printf("\t* *\n");
printf("\t* [1] 增加學生成績 [2] 查看學生成績 *\n");
printf("\t* [3] 查找學生成績 [4] 刪除學生成績 *\n");
printf("\t* [5] 統計(總成績和平均分) [6] 輸出前N名學生成績 *\n");
printf("\t* [7] 輸出不及格人數 [8] 修改學生信息 *\n");
printf("\t* [9] 關於作者 [10] 保存數據 *\n");
printf("\t* [0] 退出系統 *\n");
printf("\t*****************************************************************\n");
}運行成功,請你下去後慢慢研究下這個程序,很簡單的,祝你成功!~
求採納為滿意回答。

Ⅷ c語言學生選課管理系統

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN sizeof(struct course)
#define FORM "%d %s %s %d %d %d %d %d"
#define FORM1 "%5d%20s%20s%5d%5d%5d%5d%5d\n"
#define INPUT &p1->num,p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term
#define OUTPUT p1->num,p1->name,p1->kind,p1->all_time,p1->class_time,p1->experiment_time,p1->grade,p1->term
struct course
{int num;
char name[20];
char kind[10];
int all_time;
int class_time;
int experiment_time;
int grade;
int term;
//int flag;
struct course *next;};

void mune() //菜單函數
{
printf("************************************\n");
printf("如果錄入信息,請選擇1\n");
printf("如果瀏覽信息,請選擇2\n");
printf("如果按學分查詢課程,請選擇3\n");
printf("如果按課程性質查詢課程,請選擇4\n");
printf("如果按選修課程查詢,請選擇5\n");
printf("如果想進行選課,請選擇6\n");
printf("如果想退出,請選擇0\n");
printf("*************************************\n");
}

struct course* scan(FILE*fp) //輸入課程信息
{
struct course*head; //鏈表頭指針
struct course*p1,*p2; //指示指針
int n=0;
p1=p2=(struct course*)malloc(LEN); //開辟內存空間
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf("請輸入數據:");
scanf(FORM,INPUT); //輸入數據
fprintf(fp,FORM1,OUTPUT);
head=NULL;
while(p1->num!=0) //鏈表結束的判斷條件
{n=n+1;
if(n==1)
head=p1; //當在第一個結點時,頭指針等於第一個結點的首地址
else
p2->next=p1;
p2=p1;
p1=(struct course*)malloc(LEN); //繼續開辟內存空間
printf("請輸入數據:");
scanf("%ld",&p1->num); //輸入課程號
if(p1->num!=0) //判斷課程號是否為0,如果為0,程序結束
{scanf("%s %s %d %d %d %d %d",p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term);
//p1->flag=0;
fprintf(fp,FORM1,OUTPUT);}
}
p2->next=NULL; //最後一個結點的值為空
fclose(fp); //關閉文件
return(head); //返回頭指針
}

void print(struct course*head) //將輸入的內容顯示在屏幕上
{
struct course*p1;
if(head!=NULL) //如果頭指針為空,則程序結束
p1=head;
else
goto end;
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
do
{printf(FORM1,OUTPUT); //輸出內容
p1=p1->next; //指針指向下一個結點
}while(p1!=NULL);
end:;
}

void search_grade(struct course*head) //按學分查詢課程
{
struct course*p1;
int k,n;
n=0;
p1=head;
printf("請輸入查詢課程的學分:\n");
scanf("%d",&k);
while(p1!=NULL) //根據鏈表裡面的內容輸出
{if(k==p1->grade)
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
n++;}
p1=p1->next;}
if(n==0)
printf("無結果\n"); //如果沒有課程,則輸出無結果
}

void search_kind(struct course*head)//按課程性質查詢
{
char a[10];
int n=0;
struct course*p1;
p1=head;
gets(a);
while(p1!=NULL)
{if(strcmp(a,p1->kind)==0) //用strcmp函數進行字元串的比較
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT); //如果相同,輸出課程信息
n++;}
p1=p1->next;}
if(n==0)
printf("無結果\n");
}

void search_else(struct course*head) //查詢所有選修課程
{
struct course*p1;
int n=0;
p1=head;
while(p1!=NULL)
{if(strcmp(p1->kind,"xuanxiu")==0)
{printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
n++;}
p1=p1->next;
}
if(n==0)
printf("沒有選修課程\n");
}

void choose(struct course*head) //選課函數
{
struct course*p1;
int k,s=0; //s為所選課程的學分總數,K為所選課程的課程編號
if(head!=NULL)
{p1=head;
while(s<60) //判斷選課是否結束
{
p1=head;
printf("請輸入選擇課程的課程編號:");
scanf("%d",&k);
while(p1!=NULL) //當遍歷一遍鏈表之後,循環結束
{
if(k==p1->num) //當找到對應的課程編號後,輸出課程信息
{s=s+p1->grade;
printf("課程編號 課程名稱 課程性質 課程總學時 教學用時 實驗用時 學分 開課學期\n");
printf(FORM1,OUTPUT);
printf("選課成功!\n");
break;}
else
p1=p1->next;
if(p1==NULL) //鏈表走到最後,則沒有找到相應課程
printf("沒有這門課程\n");
}
}
printf("學分達到要求\n");
}
}

void main()
{ struct course*head;
FILE*fp;
int k;
fp=fopen("課程list.txt","a+");
loop:mune(); //goto循環的開始位置
printf("請輸入你的操作:\n");
scanf("%d",&k);
if(k!=0)
{switch(k) //利用switch語句實現菜單式工作
{case 1:head=scan(fp);break;
case 2:print(head);break;
case 3:search_grade(head);break;
case 4:search_kind(head);break;
case 5:search_else(head);break;
case 6:choose(head);break;
default:printf("操作不存在");}
goto loop;} //利用goto語句實現循環
}

自己做的,比較粗糙...用的頭指針作為參數,所以只能一次性執行完~~~

Ⅸ C語言程序設計,學生選課系統

這是這幾天我用C做的一個簡易的學生選課系統.其實是我們的1道程序實踐考試題,我想請大家看看,幫我提些建議.
#include<stdio.h>
#include<stdlib.h>
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2=0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
head1=NULL;
while(p1->num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
p1->nelepeo=0;
}
p2->next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)

Ⅹ C語言編寫學生選課管理信息系統

你好,這個系統只需要列印這些信息嗎?還是需要其他操作,如果只是列印的話不難。
你可以使用結構體或者數組來存放人員課程信息,然後列印功能就是循環輸出數組信息就可以了
如果還有其他問題可以繼續問我