久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16032|回復: 0
打印 上一主題 下一主題
收起左側

C語言做的一個學生選課系統程序源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:85764 發表于 2015-7-15 23:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int N1,N2,kk1,kk2,kk3;
  4. struct couse * head1;
  5. struct student * head2;
  6. struct couse//課程信息結構體
  7. {
  8.     int num1;
  9.     char name1[20];
  10.     int score;
  11.     int nelepeo;//課程已選人數
  12.     int Melepeo;//課程人數上限
  13.     struct couse * next;
  14. };
  15. struct student//學生信息結構體
  16. {
  17.     int num2;
  18.     char name2[20];
  19.     int nelenum[50];//已選課程編號
  20.     int nelen;//已選課程數量
  21.     struct student * next;
  22. };
  23. void Ms()
  24. {
  25.     for(kk1=0;kk1<1100;kk1++)
  26.                 for(kk2=0;kk2<1200;kk2++)
  27.                     for(kk3=0;kk3<1200;kk3++);
  28. }
  29. void keyboardc()//錄入課程子函數(從鍵盤錄入)
  30. {
  31. struct couse *p1,*p2;
  32. N1=0;
  33. p1=p2=(struct couse*)malloc(sizeof(struct couse));
  34. printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
  35. scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
  36. p1->nelepeo=0;
  37. head1=NULL;
  38. while(p1->num1!=0)
  39. {
  40.     N1=N1+1;
  41.     if(N1==1)head1=p1;
  42.     else p2->next=p1;
  43.     p2=p1;
  44.     p1=(struct couse * )malloc(sizeof(struct couse));
  45.     scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);
  46.     p1->nelepeo=0;
  47. }
  48. p2->next=NULL;
  49. }
  50. void filec()//錄入鍵盤子函數(從文件錄入)
  51. {
  52.     FILE * fp;
  53.     char filepath[20];
  54.     struct couse *p1,*p2;
  55.     N1=0;
  56.     printf("輸入要讀入的文件路徑:");
  57.     getchar();
  58.     gets(filepath);
  59.     if((fp=fopen(filepath,"r"))==NULL)
  60.     {
  61.         printf("找不到%s文件!\n",filepath);
  62.         exit(0);
  63.     }
  64.     p1=p2=(struct couse*)malloc(sizeof(struct couse));
  65.     fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
  66.     head1=NULL;
  67.     while(!feof(fp))
  68.     {
  69.         N1=N1+1;
  70.         if(N1==1)head1=p1;
  71.         else p2->next=p1;
  72.         p2=p1;
  73.         p1=(struct couse * )malloc(sizeof(struct couse));
  74.         fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);
  75.     }
  76.     p2->next=NULL;
  77. }
  78. void inputc()//錄入課程主函數
  79. {
  80.     int i;
  81.     printf("\t\t\t錄入課程信息\n");
  82.     printf("\n1.從鍵盤錄入\n");
  83.     printf("2.從文件錄入\n");
  84.     printf("3.返回主菜單\n");
  85.     printf("請選擇(1~3):\n");
  86.     scanf("%d",&i);
  87.     switch(i)
  88.     {
  89.     case(1):keyboardc();break;
  90.     case(2):filec();break;
  91.     case(3):break;
  92.     }
  93. }
  94. void insertc(struct couse *incouse)//課程管理子函數(增加課程)
  95. {
  96.     struct couse *p0,*p1,*p2;
  97.     p1=head1;
  98.     p0=incouse;
  99.     if(head1==NULL)
  100.     {
  101.         head1=p0;
  102.         p0->next=NULL;
  103.     }
  104.     else
  105.     {
  106.         while((p0->num1 > p1->num1) && (p1->next!=NULL))
  107.         {
  108.             p2=p1;
  109.             p1=p1->next;
  110.         }
  111.         if(p0->num1 <= p1->num1)
  112.         {
  113.             if(head1==p1) head1=p0;
  114.             else p2->next=p0;
  115.             p0->next=p1;
  116.         }
  117.         else
  118.         {
  119.             p1->next=p0;
  120.             p0->next=NULL;
  121.         }
  122.     }
  123.     N1=N1+1;
  124. }
  125. void delc(int num1)//課程管理子函數(刪除課程)
  126. {
  127.     struct couse *p1,*p2;
  128.     if(head1==NULL)
  129.     {
  130.         printf("\n沒有課程,無法刪除!\n");
  131.         goto end;
  132.     }
  133.     p1=head1;
  134.     while(num1!=p1->num1 && p1->next!=NULL)
  135.     {
  136.         p2=p1;
  137.         p1=p1->next;
  138.     }
  139.     if(num1==p1->num1)
  140.     {
  141.         if(p1==head1) head1=p1->next;
  142.         else p2->next=p1->next;
  143.         printf("已刪除該編號課程!\n");
  144.         N1=N1-1;
  145.     }
  146.     else printf("無該編號的課程!\n");
  147.     end:;
  148. }
  149. void managementc()//課程管理主函數
  150. {
  151.     struct couse * incouse;
  152.     int i,num1;
  153.     printf("\t\t\t課程管理\n");
  154.     printf("1.新增課程\n");
  155.     printf("2.刪除課程\n");
  156.     printf("3.返回主菜單\n");
  157.     printf("請選擇(1~3):\n");
  158.     scanf("%d",&i);
  159.     switch(i)
  160.     {
  161.     case(1):
  162.         {
  163.             incouse=(struct couse *)malloc(sizeof(struct couse));
  164.             printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
  165.             scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);
  166.             incouse->nelepeo=0;
  167.             insertc(incouse);
  168.             break;
  169.         }
  170.     case(2):
  171.         {
  172.             printf("請輸入要刪除課程的編號:\n");
  173.             scanf("%d",&num1);
  174.             delc(num1);
  175.             break;
  176.         }
  177.     case(3):break;
  178.     }
  179. }
  180. void keyboards()//錄入學生信息子函數(從鍵盤錄入)
  181. {
  182.     int i;
  183.     struct student *p1,*p2;
  184.     N2=0;
  185.     p1=p2=(struct student *)malloc(sizeof(struct student));
  186.     printf("學生學號\t學生姓名\n");
  187.     scanf("%d%s",&p1->num2,p1->name2);
  188.     p1->nelen=0;
  189.     for(i=0;i<20;i++) p1->nelenum[i]=0;
  190.     head2=NULL;
  191.     while(p1->num2!=0)
  192.     {
  193.         N2=N2+1;
  194.         if(N2==1)head2=p1;
  195.         else p2->next=p1;
  196.         p2=p1;
  197.         p1=(struct student * )malloc(sizeof(struct student));
  198.         scanf("%d%s",&p1->num2,p1->name2);
  199.         p1->nelen=0;
  200.         for(i=0;i<20;i++) p1->nelenum[i]=0;
  201.     }
  202.     p2->next=NULL;
  203. }
  204. void files()//錄入學生信息子函數(從文件錄入)
  205. {
  206.     int i=0;
  207.     FILE * fp;
  208.     char filepath[20];
  209.     struct student *p1,*p2;
  210.     N2=0;
  211.     printf("輸入要讀入的文件路徑:");
  212.     getchar();
  213.     gets(filepath);
  214.     if((fp=fopen(filepath,"r"))==NULL)
  215.     {
  216.         printf("找不到%s文件!\n",filepath);
  217.         exit(0);
  218.     }
  219.     p1=p2=(struct student*)malloc(sizeof(struct student));
  220.     fread(p1,sizeof(struct student),1,fp);
  221.     head2=NULL;
  222.     while(!feof(fp))
  223.     {
  224.         i=0;
  225.         N2=N2+1;
  226.         if(N2==1)head2=p1;
  227.         else p2->next=p1;
  228.         p2=p1;
  229.         p1=(struct student * )malloc(sizeof(struct student));
  230.         fread(p1,sizeof(struct student),1,fp);
  231.     }
  232.     p2->next=NULL;
  233. }
  234. void inputs()//錄入學生信息主函數
  235. {
  236.     int i;
  237.     printf("\t\t\t錄入學生信息\n");
  238.     printf("\n1.從鍵盤錄入\n");
  239.     printf("2.從文件錄入\n");
  240.     printf("3.返回主菜單\n");
  241.     printf("請選擇(1~3):\n");
  242.     scanf("%d",&i);
  243.     switch(i)
  244.     {
  245.     case(1):keyboards();break;
  246.     case(2):files();break;
  247.     case(3):break;
  248.     }
  249. }
  250. void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
  251. {
  252.     struct student *p0,*p1,*p2;
  253.     p1=head2;
  254.     p0=incouse;
  255.     if(head2==NULL)
  256.     {
  257.         head2=p0;
  258.         p0->next=NULL;
  259.     }
  260.     else
  261.     {
  262.         while((p0->num2 > p1->num2) && (p1->next!=NULL))
  263.         {
  264.             p2=p1;
  265.             p1=p1->next;
  266.         }
  267.         if(p0->num2 <= p1->num2)
  268.         {
  269.             if(head2==p1) head2=p0;
  270.             else p2->next=p0;
  271.             p0->next=p1;
  272.         }
  273.         else
  274.         {
  275.             p1->next=p0;
  276.             p0->next=NULL;
  277.         }
  278.     }
  279.     N2=N2+1;
  280. }
  281. void dels(int num2)//學生信息管理子函數(刪除學生信息)
  282. {
  283.     struct student *p1,*p2;
  284.     if(head2==NULL)
  285.     {
  286.         printf("\n沒有該學生信息,無法刪除!\n");
  287.         goto end;
  288.     }
  289.     p1=head2;
  290.     while(num2!=p1->num2 && p1->next!=NULL)
  291.     {
  292.         p2=p1;
  293.         p1=p1->next;
  294.     }
  295.     if(num2==p1->num2)
  296.     {
  297.         if(p1==head2) head2=p1->next;
  298.         else p2->next=p1->next;
  299.         printf("已刪除該學生信息!\n");
  300.         N2=N2-1;
  301.     }
  302.     else printf("無該學號的學生!\n");
  303.     end:;
  304. }
  305. void managements()//學生信息管理主函數
  306. {
  307.     struct student * incouse;
  308.     int i,num2;
  309.     printf("\t\t\t學生信息管理\n");
  310.     printf("1.新增學生信息\n");
  311.     printf("2.刪除學生信息\n");
  312.     printf("3.返回主菜單\n");
  313.     printf("請選擇(1~3):\n");
  314.     scanf("%d",&i);
  315.     switch(i)
  316.     {
  317.     case(1):
  318.         {
  319.             incouse=(struct student *)malloc(sizeof(struct student));
  320.             incouse->nelen=0;
  321.             incouse->nelenum[0]=0;
  322.             printf("學生學號\t學生姓名\n");
  323.             scanf("%d%s",&incouse->num2,incouse->name2);
  324.             inserts(incouse);
  325.             break;
  326.         }
  327.     case(2):
  328.         {
  329.             printf("請輸入要刪除學生的學號:\n");
  330.             scanf("%d",&num2);
  331.             dels(num2);
  332.             break;
  333.         }
  334.     case(3):break;
  335.     }
  336. }
  337. void elect(struct student * s)//選課
  338. {
  339.     struct couse * p;
  340.     int num1,i;
  341.     printf("請輸入要選課的編號:\n");
  342.     scanf("%d",&num1);
  343.     for(i=0;s->nelenum[i]!=0;i++);
  344.     s->nelenum[i]=num1;
  345.     (s->nelen)++;
  346.     p=head1;
  347.     while(p->num1!=num1) p=p->next;
  348.     (p->nelepeo)++;
  349. }
  350. void cheak()//學生選課子函數(查詢可選課程)
  351. {
  352.     char e;
  353.     struct couse * c;
  354.     struct student * s;
  355.     int num2,i,j=0,t=0;
  356.     printf("請輸入你的學號:");
  357.     scanf("%d",&num2);
  358.     s=head2;
  359.     while(s->num2!=num2 && s->next!=NULL) s=s->next;
  360.     if(s->num2!=num2)
  361.     {
  362.         printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
  363.         goto end;
  364.     }
  365.     c=head1;
  366.     printf("你的可選課程編號:\n");
  367.     while(c!=NULL)
  368.     {
  369.         for(t=0,i=0;s->nelenum[i]!=0;i++)
  370.         {
  371.             if(c->num1==s->nelenum[i]) t=1;
  372.         }
  373.         if(t==0 && (c->nelepeo!=c->Melepeo))
  374.         {
  375.             printf("%d\n",c->num1);
  376.             j++;
  377.         }
  378.         c=c->next;
  379.     }
  380.     if(j==0)
  381.     {
  382.         printf("你已選完所有課程,無法再多選!\n");
  383.         goto end;
  384.     }
  385.     printf("選課(y/n)?:\n");
  386.     getchar();
  387.     e=getchar();
  388.     i=0;
  389.     while(e=='y')
  390.     {
  391.         elect(s);
  392.         printf("繼續選課(y/n)?:\n");
  393.         getchar();
  394.         e=getchar();
  395.     }
  396.     end:;
  397. }
  398. void back(struct student * p)//退課
  399. {
  400.     struct couse * p1;
  401.     int num1,i,j;
  402.     printf("請輸入你要退掉的課程編號:\n");
  403.     scanf("%d",&num1);
  404.     p1=head1;
  405.     while(p1->num1!=num1) p1=p1->next;
  406.     for(i=0;p->nelenum[i]!=num1;i++);
  407.     for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
  408.     p->nelenum[--j]=0;
  409.     (p1->nelepeo)--;
  410.     printf("退課成功!\n");
  411. }
  412. void hcheak()//學生選課子函數(查詢已選課程)
  413. {
  414.     char c;
  415.     struct couse * p0;
  416.     struct student * p;
  417.     int num2,i,f=0;
  418.     printf("請輸入學號:\n");
  419.     scanf("%d",&num2);
  420.     p=head2;
  421.     while(p->num2!=num2 && p!=NULL) p=p->next;
  422.     if(p==NULL)
  423.     {
  424.         printf("不存在你的信息,請回主菜單錄入信息:\n");
  425.         goto end;
  426.     }
  427.     printf("已選課程編號:\n");
  428.     if(p->nelenum[0]==0)
  429.     {
  430.         printf("你還沒選課!\n");
  431.         goto end;
  432.     }
  433.     for(i=0;p->nelenum[i]!=0;i++)
  434.     {
  435.         printf("%d\n",p->nelenum[i]);
  436.         p0=head1;
  437.         while(p0->num1!=p->nelenum[i]) p0=p0->next;
  438.         f=f+p0->score;
  439.     }
  440.     printf("總學分:%d\n",f);
  441.     printf("是否進行退課(y/n)?");
  442.     getchar();
  443.     c=getchar();
  444.     while(c=='y')
  445.     {
  446.         back(p);
  447.         printf("繼續退課(y/n)?");
  448.         getchar();
  449.         c=getchar();
  450.         (p->nelen)--;
  451.     }
  452.     end:;
  453. }
  454. void elective()//學生選課主函數
  455. {
  456.     int i;
  457.     printf("\t\t\t學生選課\n");
  458.     printf("1.查詢可選課程\n");
  459.     printf("2.查詢已選課程\n");
  460.     printf("3.返回主菜單\n");
  461.     printf("請輸入(1~3):\n");
  462.     scanf("%d",&i);
  463.     switch(i)
  464.     {
  465.     case(1):cheak();break;
  466.     case(2):hcheak();break;
  467.     case(3):break;
  468.     }
  469. }
  470. void listc()//輸出課程信息
  471. {
  472.     struct couse * p;
  473.     p=head1;
  474.     printf("課程編號  課程名稱  學分  課程已選人數  課程人數上限\n");
  475.     while(p!=NULL)
  476.     {
  477.         printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
  478.         p=p->next;
  479.     }
  480. }
  481. void lists()//輸出學生信息
  482. {
  483.     struct student * p;
  484.     p=head2;
  485.     printf("學生學號  學生姓名  已選課程數量\n");
  486.     while(p!=NULL)
  487.     {
  488.         printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
  489.         p=p->next;
  490.     }
  491. }
  492. void intoc()//存儲課程信息
  493. {
  494.     FILE * fp;
  495.     struct couse * p;
  496.     char filepath[30];
  497.     printf("輸入課程信息要保存的文件路徑:");
  498.     getchar();   
  499.     gets(filepath);
  500.     if((fp=fopen(filepath,"w"))==NULL)
  501.     {
  502.         printf("\n保存失敗!");
  503.         exit(0);
  504.     }
  505.     p=head1;
  506.     while(p!=NULL)
  507.     {
  508.         fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
  509.         p=p->next;
  510.     }
  511.     fclose(fp);
  512.     printf("課程信息已保存在%s中!\n",filepath);
  513. }
  514. void intos()//存儲學生信息
  515. {
  516.     FILE * fp;
  517.     struct student * p;
  518.     char filepath[30];
  519.     printf("輸入學生信息要保存的文件路徑:");
  520.     getchar();   
  521.     gets(filepath);
  522.     if((fp=fopen(filepath,"w"))==NULL)
  523.     {
  524.         printf("\n保存失敗!");
  525.         exit(0);
  526.     }
  527.     p=head2;
  528.     while(p!=NULL)
  529.     {
  530.         fwrite(p,sizeof(struct student),1,fp);
  531.         p=p->next;
  532.     }
  533.     fclose(fp);
  534.     printf("學生信息已保存在%s中!\n",filepath);
  535. }
  536. void into()//存儲信息
  537. {
  538.     int i;
  539.     printf("1.存儲課程信息\n");
  540.     printf("2.存儲學生信息\n");
  541.     printf("3.返回主菜單\n");
  542.     printf("請輸入(1~3)\n");
  543.     scanf("%d",&i);
  544.     switch(i)
  545.     {
  546.     case(1):intoc();break;
  547.     case(2):intos();break;
  548.     case(3):break;
  549.     }   
  550. }
  551. void store()//信息主函數
  552. {
  553.     int i;
  554.     printf("\t\t系統信息查看及存儲\n");
  555.     printf("1.查看課程信息\n");
  556.     printf("2.查看學生信息\n");
  557.     printf("3.存儲信息\n");
  558.     printf("4.返回主菜單\n");
  559.     printf("請輸入(1~4):\n");
  560.     scanf("%d",&i);
  561.     switch(i)
  562.     {
  563.     case(1):listc();break;
  564.     case(2):lists();break;
  565.     case(3):into();break;
  566.     case(4):break;
  567.     }
  568. }
  569. int main()//主函數
  570. {
  571.     int i;
  572.     start:
  573.     printf("\n\t\t\t歡迎使用學生選課系統!\n");
  574.     printf("菜單:\n");
  575.     printf("1.錄入課程信息\n");
  576.     printf("2.課程管理\n");
  577.     printf("3.錄入學生信息\n");
  578.     printf("4.學生信息管理\n");
  579.     printf("5.學生選課\n");
  580.     printf("6.系統信息查看及存儲\n");
  581.     printf("7.退出系統\n");
  582.     printf("\n請輸入菜單選項(1~7):\n");
  583.     scanf("%d",&i);
  584.     if(i<1 || i>7)
  585.     {
  586.         printf("輸入錯誤,請重輸:\n");
  587.         goto start;
  588.     }
  589.     switch(i)
  590.     {
  591.     case(1):
  592.         {
  593.             system("cls");
  594.             inputc();
  595.             goto start;
  596.             break;
  597.         }
  598.     case(2):
  599.         {
  600.             system("cls");
  601.             managementc();
  602.             goto start;
  603.             break;
  604.         }
  605.     case(3):
  606.         {
  607.             system("cls");
  608.             inputs();
  609.             goto start;
  610.             break;
  611.         }
  612.     case(4):
  613.         {
  614.             system("cls");
  615.             managements();
  616.             goto start;
  617.             break;
  618.         }
  619.     case(5):
  620.         {
  621.             system("cls");
  622.             elective();
  623.             goto start;
  624.             break;
  625.         }
  626.     case(6):
  627.         {
  628.             system("cls");
  629.             store();
  630.             goto start;
  631.             break;
  632.         }
  633.     case(7):
  634.         {
  635.             system("cls");
  636.             printf("感謝使用本系統!\n\n再見!\n");
  637.         }
  638.     }
  639.     return(0);
  640. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久免费视频1 | 亚洲日本欧美 | 国产精品久久在线 | 不卡一区二区在线观看 | 在线成人www免费观看视频 | 中文字幕一区二区三区不卡 | 老外几下就让我高潮了 | 欧美一级免费 | 亚洲欧美在线观看 | 国产高清精品一区二区三区 | 在线免费观看毛片 | 日韩欧美在线视频 | 国产午夜精品久久久 | 999精品视频在线观看 | 欧美久久久久久久 | 日本二区 | 欧美xxxx做受欧美 | 欧美一区二区三区在线观看视频 | 精品国产99| 午夜一区| 久久99精品久久久久久 | 久久99视频| 国产精品国产三级国产aⅴ浪潮 | 九九热在线免费观看 | 高清av电影 | 国产精品久久亚洲 | 欧美综合久久久 | 亚洲码欧美码一区二区三区 | 精品久久精品 | 夜色www国产精品资源站 | 国产91久久久久久 | 91精品久久久 | 久久久久久www | 二区在线视频 | 一区二区三区四区五区在线视频 | 国产精品成人一区二区三区 | 精品毛片 | 欧美xxxx色视频在线观看免费 | 亚洲aⅴ | 亚洲国产精品一区二区三区 | 亚洲精品国产第一综合99久久 |