国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實現(xiàn)學(xué)生選課系統(tǒng)完整版

2020-01-26 13:31:56
字體:
供稿:網(wǎng)友

本文實例為大家分享了C語言實現(xiàn)學(xué)生選課系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

#include<stdio.h> #include<stdlib.h>int N1,N2,kk1,kk2,kk3;struct couse * head1;struct student * head2;struct couse//課程信息結(jié)構(gòu)體{  int num1;  char name1[20];  int score;  int nelepeo;//課程已選人數(shù)  int Melepeo;//課程人數(shù)上限  struct couse * next;};struct student//學(xué)生信息結(jié)構(gòu)體{  int num2;  char name2[20];  int nelenum[50];//已選課程編號  int nelen;//已選課程數(shù)量  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()//錄入課程子函數(shù)(從鍵盤錄入){struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse));printf("課程編號/t課程名稱/t學(xué)分/t課程人數(shù)上限/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()//錄入鍵盤子函數(shù)(從文件錄入){  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()//錄入課程主函數(shù){  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)//課程管理子函數(shù)(增加課程){  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)//課程管理子函數(shù)(刪除課程){  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()//課程管理主函數(shù){  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學(xué)分/t課程人數(shù)上限/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()//錄入學(xué)生信息子函數(shù)(從鍵盤錄入){  int i;  struct student *p1,*p2;  N2=0;  p1=p2=(struct student *)malloc(sizeof(struct student));  printf("學(xué)生學(xué)號/t學(xué)生姓名/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()//錄入學(xué)生信息子函數(shù)(從文件錄入){  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()//錄入學(xué)生信息主函數(shù){  int i;  printf("/t/t/t錄入學(xué)生信息/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)//學(xué)生信息管理子函數(shù)(填加學(xué)生信息){  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)//學(xué)生信息管理子函數(shù)(刪除學(xué)生信息){  struct student *p1,*p2;  if(head2==NULL)  {    printf("/n沒有該學(xué)生信息,無法刪除!/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("已刪除該學(xué)生信息!/n");    N2=N2-1;  }  else printf("無該學(xué)號的學(xué)生!/n");  end:;}void managements()//學(xué)生信息管理主函數(shù){  struct student * incouse;  int i,num2;  printf("/t/t/t學(xué)生信息管理/n");  printf("1.新增學(xué)生信息/n");  printf("2.刪除學(xué)生信息/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("學(xué)生學(xué)號/t學(xué)生姓名/n");      scanf("%d%s",&incouse->num2,incouse->name2);      inserts(incouse);      break;    }  case(2):    {      printf("請輸入要刪除學(xué)生的學(xué)號:/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()//學(xué)生選課子函數(shù)(查詢可選課程){  char e;  struct couse * c;  struct student * s;  int num2,i,j=0,t=0;  printf("請輸入你的學(xué)號:");  scanf("%d",&num2);  s=head2;  while(s->num2!=num2 && s->next!=NULL) s=s->next;  if(s->num2!=num2)  {    printf("不存在你的信息,請進(jìn)入主菜單錄入你的信息!/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("繼續(xù)選課(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()//學(xué)生選課子函數(shù)(查詢已選課程){  char c;  struct couse * p0;  struct student * p;  int num2,i,f=0;  printf("請輸入學(xué)號:/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("總學(xué)分:%d/n",f);  printf("是否進(jìn)行退課(y/n)?");  getchar();  c=getchar();  while(c=='y')  {    back(p);    printf("繼續(xù)退課(y/n)?");    getchar();    c=getchar();    (p->nelen)--;  }  end:;}void elective()//學(xué)生選課主函數(shù){  int i;  printf("/t/t/t學(xué)生選課/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("課程編號 課程名稱 學(xué)分 課程已選人數(shù) 課程人數(shù)上限/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()//輸出學(xué)生信息{  struct student * p;  p=head2;  printf("學(xué)生學(xué)號 學(xué)生姓名 已選課程數(shù)量/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()//存儲學(xué)生信息{  FILE * fp;  struct student * p;  char filepath[30];   printf("輸入學(xué)生信息要保存的文件路徑:");  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("學(xué)生信息已保存在%s中!/n",filepath); }void into()//存儲信息{  int i;  printf("1.存儲課程信息/n");  printf("2.存儲學(xué)生信息/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()//信息主函數(shù){  int i;  printf("/t/t系統(tǒng)信息查看及存儲/n");  printf("1.查看課程信息/n");  printf("2.查看學(xué)生信息/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()//主函數(shù){  int i;  start:  printf("/n/t/t/t歡迎使用學(xué)生選課系統(tǒng)!/n");  printf("菜單:/n");  printf("1.錄入課程信息/n");  printf("2.課程管理/n");  printf("3.錄入學(xué)生信息/n");  printf("4.學(xué)生信息管理/n");  printf("5.學(xué)生選課/n");  printf("6.系統(tǒng)信息查看及存儲/n");  printf("7.退出系統(tǒng)/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("感謝使用本系統(tǒng)!/n/n再見!/n");    }  }  return(0);}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 永定县| 西吉县| 鄂托克旗| 朝阳县| 武清区| 乌审旗| 华阴市| 湖南省| 泸州市| 台南市| 淳安县| 温泉县| 香港| 阿尔山市| 菏泽市| 东台市| 洛宁县| 广州市| 泰顺县| 五寨县| 白银市| 云南省| 石屏县| 苏尼特右旗| 崇信县| 都兰县| 衡水市| 竹溪县| 香格里拉县| 清水县| 西峡县| 茂名市| 响水县| 平利县| 靖西县| 福建省| 红原县| 吉木萨尔县| 云梦县| 哈密市| 江油市|