|
/*
* 已經(jīng)將錯(cuò)誤改正. * 建議 id 為字符串型, 加入檢測(cè)是否惟一. 可以加入很多功能, 希望能做得更好. * 最好是圖形界面的. * Welcome to mysite http://www. */ #include "stdio.h" #include "stdlib.h" #include "string.h" #define N 2 struct stu_info{ int id; /*學(xué)號(hào)*/ char name[20]; /*姓名*/ char major[20]; /*專業(yè)*/ float score; /*分?jǐn)?shù)*/ }; struct stu_info student[20]; struct stu_info *p; struct stu_info temp; FILE *fp; /*輸入模塊*/ int save(){ if((fp=fopen("student.dat","w+"))==NULL){ printf("文件打開失敗!\n"); exit(0); } printf("請(qǐng)依次輸入 %d 個(gè)同學(xué)的信息:\n",N); printf("學(xué)號(hào)\t姓名\t專業(yè)\t分?jǐn)?shù)\n"); for(p=student;p<student+N;p++){ scanf(" %d %s %s %f",&(p->id),p->name,p->major,&(p->score)); fwrite(p,sizeof(struct stu_info),1,fp); } printf("輸入結(jié)束!\n"); fclose(fp); return 0; } /*輸出模塊*/ int show(){ if((fp=fopen("student.dat","r"))==NULL){ printf("文件打開失敗!\n"); exit(0); } printf("文件已經(jīng)打開,現(xiàn)在顯示所有同學(xué)的信息.\n"); p=student; printf("學(xué)號(hào)\t姓名\t專業(yè)\t分?jǐn)?shù)\n"); while(fread(p,sizeof(struct stu_info),1,fp)!=0){ printf("%d\t%s\t%s\t%f\n",p->id,p->name,p->major,p->score); p++; } fclose(fp); return 0; } /*建立文件模塊*/ int select_id(int sid){ int flag=0; struct stu_info temp; if((fp=fopen("student.dat","r"))==NULL){ printf("文件打開失敗!\n"); exit(0); } while(fread(&temp,sizeof(struct stu_info),1,fp)!=0 && flag==0){ if(sid==temp.id){ printf("%d\t%s\t%s\t\t%.2f\n",temp.id,temp.name,temp.major,temp.score); flag=1; break; } } if(flag==0){ printf("這里沒有學(xué)號(hào)為 %d 的記錄.\n", sid); } fclose(fp); return 0; } int select_major(char smajor[]){ int flag=0; struct stu_info temp; if((fp=fopen("student.dat","r"))==NULL){ printf("文件打開失敗!\n"); exit(0); } while(fread(&temp,sizeof(struct stu_info),1,fp)!=0){ if (strcmp(smajor,temp.major)==0){ printf("%d\t%s\t%s\t%f\n",temp.id,temp.name,temp.major,temp.score); flag=1; } } if(flag==0){ printf("這里沒有專業(yè)為 %s 的有關(guān)記錄.\n", smajor); } fclose(fp); return 0; } /*查詢模塊*/ int search(){ int k,sid; char smajor[20]; printf("選擇查詢方式:\n"); printf("1.通過學(xué)生的學(xué)號(hào)查詢.\n"); printf("2.通過學(xué)生的專業(yè)查詢.\n"); printf("請(qǐng)輸入1或2進(jìn)行查詢:\n"); scanf("%d",&k); switch(k){ case 1: printf("請(qǐng)輸入學(xué)號(hào):\n"); scanf("%d",&sid); select_id(sid); break; case 2: printf("請(qǐng)輸入專業(yè):\n"); scanf("%s",smajor); select_major(smajor); break; default: printf("輸入有誤.\n"); exit(0); } return 0; } /*添加模塊*/ int append(){ struct stu_info temp; printf("請(qǐng)輸入添加的學(xué)生記錄信息.\n"); scanf("%d\t%s\t%s\t%f",&(temp.id),temp.name,temp.major,&(temp.score)); if((fp=fopen("student.dat","a+"))==NULL){ printf("文件打開失敗!\n"); exit(0); } fseek(fp,sizeof(struct stu_info),1); fwrite(&temp,sizeof(struct stu_info),1,fp); printf("記錄已經(jīng)被添加.\n"); fclose(fp); return 0; } /*修改模塊*/ int amend(){ int flag=0; struct stu_info temp; int sid; char smajor[15]; float newscore; if((fp=fopen("student.dat","r+"))==NULL){ printf("文件打開失敗!\n"); exit(0); } printf("請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào):\n"); scanf("%d",&sid); while(fread(&temp,sizeof(struct stu_info),1,fp)!=0 && flag==0) if(sid==temp.id){ printf("原來的記錄是 %d\t%s\t%s\t%.2f\n",temp.id,temp.name,temp.major,temp.score); printf("請(qǐng)輸入正確的專業(yè):\n"); scanf("%s",smajor); printf("請(qǐng)輸入正確的分?jǐn)?shù):\n"); scanf("%f",&newscore); strcpy(temp.major,smajor); temp.score=newscore; printf("現(xiàn)在的記錄是 %d\t%s\t%s\t%.2f\n",temp.id,temp.name,temp.major,temp.score); fseek(fp,-sizeof(struct stu_info),1); fwrite(&temp,sizeof(struct stu_info),1,fp); flag=1; printf("記錄已經(jīng)被修改.\n"); break; } if(flag==0) printf("這里沒有需要添加的信息.\n"); fclose(fp); return 0; } /*刪除模塊*/ int deleted(){ int sid; //int del_id=0; int i=0,j; int number=0; printf("請(qǐng)輸入需要?jiǎng)h除的學(xué)生的學(xué)號(hào):\n"); scanf("%d",&sid); if((fp=fopen("student.dat","r+"))==NULL){ printf("文件打開失敗!\n"); exit(0); } p=student; while(fread(p,sizeof(struct stu_info),1,fp)!=0){ if(sid==p->id){ printf("以下記錄將被刪除:\n%d\t%s\t%s\t%.2f\n",p->id,p->name,p->major,p->score); i--; } i++; number++; } if(i==number) printf("這里沒有需要添加的信息.\n"); else{ printf("最新的文件有 %d 記錄.\n",i); rewind(fp); for(j=0;j<i;j++){ printf("%d\t%s\t%s\t%.2f\n",student[j].id,student[j].name,student[j].major,student[j].score); fwrite(&student[j],sizeof(struct stu_info),1,fp); } printf("記錄已經(jīng)被刪除.\n"); } fclose(fp); return 0; } /* main program */ int main(){ p=student; int choice; while(1){ printf(" ***************學(xué)生管理系統(tǒng)***************\n\n\n"); printf(" 1.輸入 %d 個(gè)學(xué)生信息.\n\n", N); printf(" 2.顯示學(xué)生的信息.\n\n"); printf(" 3.尋找學(xué)生的信息.\n\n"); printf(" 4.修改學(xué)生的信息.\n\n"); printf(" 5.添加學(xué)生的信息.\n\n"); printf(" 6.刪除學(xué)生的信息.\n\n"); printf(" 0.退出學(xué)生管理系統(tǒng).\n\n"); printf(" 請(qǐng)選擇(0-6):\n"); scanf("%d",&choice); switch(choice){ case 1: save();break; /*輸入模塊*/ case 2: show();break; /*輸出模塊*/ case 3: search();break; /*查詢模塊*/ case 4: amend();break; /*修改模塊*/ case 5: append();break; /*添加模塊*/ case 6: deleted();break; /*刪除模塊*/ case 0: exit(0); default:printf("輸入的數(shù)字有誤.\n"); } } return 0; } |
|
|