电竞比分网-中国电竞赛事及体育赛事平台

分享

在ubuntu下用C語言編寫一個(gè)學(xué)生管理系統(tǒng),編譯時(shí)出錯(cuò),緊急求救?。。?/span>

 hubimaso 2012-04-19
/*
* 已經(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;
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多