C言語は簡単な学籍管理システムを実現する

8323 ワード

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ほほほ、彼は元の設計のメモリを解放していません!/----でも、私は彼の名前を忘れて、今日出したのはみんなに参考にさせたいのです!/----问い合わせや著作権の问题があれば、できるだけ早く本人に连络してください.デザインはやはりとても良くて、インタフェースにしても思想にしても、バグがあって、/----は死の循環に陥ることができて、主な原因はユーザーの誤った入力^^/----ストリームの状態がずっと間違っていて、入力が正しく消費されていません!/----だから必死に循環します!!私も修正していません./----もし問題があれば本人と交流します://----E-mail:[email protected] QQ:36274668//----blog: http://blog.csdn.net/lonelyforest(乱,没水准!请多指教!)/---私と連絡して交流することができます!広交各路名手!//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------以下はソースコードです!
#include #include #include int shoudsave=0;//struct student{char num[10];//学号char name[20];int cgrade;int mgrade;int egrade;int totle;int ave;};typedef struct node { struct student data; struct node *next; }Node,*Link; void menu(){printf("****************************************************************************");printf("/t 1学生資料/t/t/t/t/t/t 2学生資料/nを入力);printf("/t 3学生資料/t/t/t/t 4学生材料/nを照会);printf("/t 5学生資料/t/t/t/t/t 6学生成績/nを統計する");printf("/t 5学生資料/t/t/t/t/t/t 6を表示する);「/t 7ソート学生成績/t/t/t/t/t/t 8保存学生資料/n」);printf("/t 9取得ヘルプ情報/t/t/t/t/t/t 0終了システム/n");printf("********************************************************************************/n"); } void printstart() { printf("-----------------------------------------------------------------------/n"); } void Wrong(){printf("/n=======>>プロンプト:入力エラー!/n");void Nofind(){printf("/n=======>>ヒント:学生が見つかりません!/n");void printc()/本関数は中国語{printf(「学号/t氏名英語成績数学成績C言語成績総点平均点/n」)を出力するために使用されます.void printe(Node*p)/この関数は、英語{printf("%12 s%s/t%d/t%d/t%d/t%d/t%d/t%d/t%d/t%d/n",p->data.num,p->data.name,
p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave); } Node*Locate(Link l,char findmess[],char nameornum[])/この関数は、連結テーブル内の要求に合致する接点を特定し、ポインタ{Node*r;if(strcmp(nameornum)==0)//学号で{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0)return;r=r->next;}else if(strcmp(nameornum、「name」==0)//名前で{r=l->next;while(r){if(strcmp(r->data.name、findmess)==0)returnr;r=r->next;}return 0; } void Add(Link l)/学生を増やす{Node*p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;//////////////最後尾while(1){printf('0'で上位メニューを返してください:));scanf("%s",num);if(strcmp(num,"0")==0)break;while(s){if(strcm(s){if(strcm(strcmp(")==0)break;while(s){if p(s->data.num,num)=0){printf("======>ヒント:学号'%s'の学生はすでに存在します.修正するには'4修正'!/nを選択してください.num).printstart(); printc(); printe(s); printstart(); printf("/n"); return; } s=s->next; } p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num); printf(「名前を入力してください:」);scanf("%s",p->data.name); getchar(); printf(「c言語の成績を入力してください:」);scanf("%d",&p->data.cgrade); getchar(); printf(「数学の成績を入力してください:」);scanf("%d",&p->data.mgrade); getchar(); printf(「英語の成績を入力してください:」);scanf("%d",&p->data.egrade); getchar(); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle/3;//情報入力が完了しましたp->next=NULL;r->next=p; r=p; shoudsave=1; } } void Qur(Link l)/学生{int sel;char findmess[20];Node*p;if(!l->next){printf("/n========>>ヒント:クエリーできる資料がない!/n");return;}printf("/n=======>1学号で検索/n====>2名前で検索/n");scanf("%d",&sel); if(sel==1)/学号{printf("検索する学号を入力してください:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("/t/t/t/t/t/t検索結果/n");printstart();printc();printe(p);printstart();else Nofind(); } else if(sel=2)//名前{printf("検索する名前を入力してください:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){printf("/t/t/t/t/t/t検索結果/n");printstart();printc();printe(p);printstart();else Nofind(); } else Wrong(); } void Del(Link l)/削除{int sel;Node*p,*r;char findmess[20];if(!l->next){printf("/n========>>ヒント:削除できる資料がない!/n");return;}printf("/n=======>1学号で削除/n====>2名前で削除/n");scanf("%d",&sel); if(sel==1){printf("削除する学号を入力してください:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("/n==========>ヒント:この学生は削除に成功しました!/n");shoudsave=1;else Nofind(); } else if(sel==2){printf("削除する名前を入力してください:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("/n=======>ヒント:この学生は削除に成功しました!/n");shoudsave=1;else Nofind(); } else Wrong(); } void Modify(Link l){Node*p;char findmess[20];if(!l->next){printf("/n=========>>ヒント:修正できる資料がない!/n");return;}printf(「修正する学生番号を入力してください:」);scanf("%s",findmess); p=Locate(l,findmess,"num"); (p){printf("新しいc言語の成績(元は%d分):",p->data.cgrade);scanf("%d",&p->data.cgrade);getchar();printf("新しい数学の成績(元は%d分):",p->data.mgrade);scanf("%d",&p->data.mgrade);getchar();printf("新しい英語の成績(元は%d分):",p->data.egrade);;p->data.egrade);;;printf(",p->data.egrade);;;scanf("%d",&p->data.egrade);printf("/n======>ヒント:資料の修正に成功!/n");shoudsave=1; } else Nofind(); } void Disp(Link l){int count=0;Node*p;p=l->next;if(!p){printf("/n=========>>ヒント:表示できる資料がない!/n");return;}printf("/t/t/t/t/t表示結果/n");printstart(); printc(); printf("/n"); while(p) { printe(p); p=p->next; } printstart(); printf("/n"); } void Save(Link l){FILE*fp;Node*p;int flag=1,count=0;fp=fopen("c://student","wb");if(fp=NULL){printf("/n========>ヒント:ファイルを再開する際にエラーが発生!/n");exit(1);}p=l->next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) { p=p->next; count++; } else { flag=0; break; } } if(flag){printf("/n======>>ヒント:ファイルの保存に成功しました.(%dレコードが保存されています.)/n",count);shoudsave=0;}fclose(fp);}int main(){Link l;//連表FILE*fp;//ファイルポインタint sel;char ch;int count=0;Node*p、*r;printf("/t/t/t/t/t/t学生成績管理システム/n/t/t/t/t----------------------------------------------------------------/n");l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("C://sdetunt",;l","C://sdetunt",""ab+");if(fp=NULL){printf("/n======>プロンプト:ファイルを開くことはできません!/n');exit(0);}printf('/n===========>プロンプト:ファイルが開いていて、レコードをインポートしています....../n');while(!feof(fp){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)==1)//ファイルの内容を接点に入れるfclose(fp);//ファイルprintfを閉じます('/n========>>ヒント:レコードのインポートが完了し、%dレコード./nをインポートします.count);menu(); while(1){printf("操作を選択してください:");scanf("%d",&sel);if(sel==0){if(shoudsave==1){getchar();printf("/n========>>ヒント:資料が変更され、変更がファイルに保存されているかどうか(y/n)?/n");scanf("%c",&ch);if(ch='y'|ch="|ch='Y')Save(l);printf("/n========>ヒント:システムを終了しました.さようなら!/n");break; } switch(sel){case 1:Add(l);break;//学生case 2:Del(l);break;//////学生case 3:Qur(l);break;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////============================================================ult:Wrong();getchar();break;}
while(l){//チェーンテーブルlを解放(1ではない)するメモリ!p=l;l=l->next;free(p);getch(); return 0; }