程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-C語言初學者提問,不會修改程序

c語言-C語言初學者提問,不會修改程序

編輯:編程綜合問答
C語言初學者提問,不會修改程序

可以運行,但是達不到目的,不會修改

程序代碼:

typedef struct /* 學生結構 /
{
short status; /
數據狀態,0:正常 1:刪除 /
char number[10]; /
學號 /
char name[20]; /
姓名 /
char sex[3]; /
性別 /
int age; /
年齡 /
char place; /
籍貫 /
char department; /
系別 /
char major; /
專業 /
int classnumber; /
班級 */
}StudentType;

void AddData(void); /* 增加數據 /
void ChangeData(void); /
修改數據 /
void SearchData(void); /
查找數據 /
void ListData(void); /
顯示數據 /
void PackData(void); /
刪除數據 */

#include /* 標准輸入輸出文件包含預處理命令 /
#include /
字符串文件含預處理命令 /
#include /
包含tolower()的原型 /
#include /
標准庫文件包含預處理命令 */

FILE*fp; /* 聲明文件指針 */

void AddData(void) /* 增加文件數據 /
{
StudentType student; /
學生 /
char tag; /
設置標志是否繼續增加 /
student.status=0; /
數據狀態,0:正常 1:刪除 /
do
{
printf("學生學號:");
scanf("%s,student.number"); /
輸入學號 /
printf("學生姓名:");
scanf("%s,student.name"); /
輸入姓名 /
printf("學生性別:");
scanf("%s,student.sex"); /
輸入性別 /
printf("學生年齡:");
scanf("%d,student.age"); /
輸入年齡 /
printf("學生籍貫:");
scanf("%s,student.place"); /
輸入籍貫 /
printf("學生系別");
scanf("%s,student.department"); /
輸入系別 /
printf("學生專業:");
scanf("%s,student.major"); /
輸入專業 /
printf("學生班級:");
scanf("%d,student.classnumber"); /
輸入班級 */

fseek(fp,0, SEEK_END); /* 移動文件內部指針 /
fwrite(&student,sizeof(StudentType),1,fp); /
將圖書信息存入文件中 /
printf("繼續添加嗎(y/n):");
while (getchar() !='\n'); /
跳過當前行 /
tag=getchar(); /
y,Y表示繼續,N,n表示結束 /
tag=tolower(tag); /
大寫字母轉化為小寫字母 /
while (tag !='y' && tag !='n')
{ /
非法輸入時重新輸入 /
printf("輸入非法,重新輸入(y/n):");
while (getchar() !='\n'); /
跳過當前行 /
tag=getchar(); /
y,Y表示繼續,N,n表示結束 /
tag=tolower(tag); /
大寫字母轉化為小寫字母 */
}

}while (tag=='y'); /* 肯定回答時循環 */
}

void ChangeData(void) /* 更新數據 /
{
StudentType student; /
學生 /
char number[20]; /
學生學號 /
printf("輸入要更改的學生學號:");
scanf("%s",number); /
輸入學生學號 /
rewind(fp); /
使位置指針返回到文件開頭 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生信息 */
while(!feof(fp))

{      /* 文件未結束 */
   if(strcmp(student.number,number)==0   /* 學生學號相同 */
       && student.status==0               /* 數據狀態正常,未作刪除標志 */
       )break;                            /* 查詢成功 */
   fread(&student,sizeof(StudentType),1,fp);   /* 讀入學生信息 */
}
if (!feof(fp))
{  /* 查詢成功 */

printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","學生學號","學生姓名","學生性別","學生年齡","學生籍貫","學生系別","學生專業","學生班級");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/* 輸出信息 */
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);

printf("輸入更改後的數據:\n");
printf("學生學號:");
scanf("%s,student.number"); /* 輸入學號 /
printf("學生姓名:");
scanf("%s,student.name"); /
輸入姓名 /
printf("學生性別:");
scanf("%s,student.sex"); /
輸入性別 /
printf("學生年齡:");
scanf("%d,student.age"); /
輸入年齡 /
printf("學生籍貫:");
scanf("%s,student.place"); /
輸入籍貫 /
printf("學生系別");
scanf("%s,student.department"); /
輸入系別 /
printf("學生專業:");
scanf("%s,student.major"); /
輸入專業 /
printf("學生班級:");
scanf("%d,student.classnumber"); /
輸入班級
fseek(fp,-sizeof(StudentType), SEEK_CUR); /* 移動文件內部指針 /
fwrite(&student, sizeof(StudentType),1,fp); /
寫入數據 /
}
else
{ /
查詢失敗 /
printf("無此編號的學生!\n");
clearerr(fp); /
清除文件結束標志 */

}
}

void SearchData(void)
{
StudentType student; /* 查詢數據 /
int select; /
工作變量 /
char number[20]; /
學號 /
char major[20]; /
專業 */

printf("請選擇:\n");
printf("1.按學號查詢 2.按專業查詢\n");
scanf("%d",&select); /* 輸入選擇 /
while (select2)
{
printf("請輸入1~2的數:"); /
輸入提示 /
scanf("%d,&select"); /
輸入選擇 */
}

switch (select)
{
case 1: /* 按學生學號查詢 /
printf("請輸入要查詢的學生學號:");
scanf("%s",number); /
輸入學生的學號 /
rewind(fp); /
使指針位置返回到文件的開頭 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生信息 /
while (!feof(fp))
{ /
文件未結束 /
if(strcmp(student.number,number)==0 /
學生學號相同 /
&& student.status==0 /
數據狀態正常,沒有刪除標志 /
)break; /
查詢成功 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生信息 /
}
break;
case 2:
printf("輸入要查詢的學生的專業:"); /
按專業查詢 /
scanf("%s",major); /
輸入學生專業 /
rewind(fp); /
使指針返回文件的開頭 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生的信息 /
while(!feof(fp))
{ /
文件未結束 /
if (strcmp(student.major,major)==0 /
學生專業相同 /
&& student.status==0 /
數據狀態正常,沒有刪除標志 /
) break; /
查詢成功 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生信息 /
}
break;
}
if (!feof(fp))
{ /
查詢成功 /
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","學生學號","學生姓名","學生性別","學生年齡","學生籍貫","學生系別","學生專業","學生班級");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/
輸出信息 /
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);
}
else
{ /
查詢失敗 /
printf("無此專業的學生!\n");
clearerr(fp); /
清除文件結束標志 */
}
}

void DeleteData(void) /* 刪除數據,只作刪除標志 /
{
StudentType student; /
學生 /
char number[20]; /
學生學號 /
printf("輸入要更新的學生的學號:");

scanf("%s", number); /
輸入學生的學號 /
rewind(fp); /
使位置指針返回文件的開頭 /
fread(&student, sizeof(StudentType),1,fp); /
讀入學生的信息 /
while(!feof(fp))
{ /
文件未結束 /
if (strcmp(student.number, number)==0 /
學生的學號相同 /
&& student.status==0 /
數據狀態正常,未作刪除標志 /
)break; /
查詢成功 /
fread(&student,sizeof(StudentType),1,fp); /
讀入學生信息 /
}
if(!feof(fp))
{ /
查詢成功 /
printf("被刪除記錄為:、n");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","學生學號","學生姓名","學生性別","學生年齡","學生籍貫","學生系別","學生專業","學生班級");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/
輸出信息 /
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);
student.status=1;
fseek(fp,-sizeof(StudentType), SEEK_CUR); /
移動文件內部指針 /
fwrite(&student, sizeof(StudentType),1,fp); /
寫入數據 /
}
else
{ /
查詢失敗 /
printf("無此編號的學生!\n");
clearerr(fp); /
清除文件結束標志 */

}
}

void pack(void) /* 在物理上刪除作有刪除標記的記錄 /
{
StudentType student; /
學生 /
FILE*fpTmp; /
臨時文件指針 /
if ((fpTmp=fopen("book_tmp.dat","wb"))==NULL)

{ /
打開文件失敗 /
printf("打開文件student_tmp.dat 失敗!\n"); /
錯誤信息 /
system("PAUSE"); /
調用庫函數system(),輸出系統提示信息 /
exit(2); /
退出程序 */
}

rewind(fp);                                     /* 使位置指針返回文件開頭 */
fread(&student,sizeof(StudentType),1,fp);            /* 讀入學生信息 */
while (!feof(fp))
{        /* 文件未結束 */
    if(student.status==0)                         /*數據狀態正常,未作刪除標志 */
       fwrite(&student,sizeof(StudentType),1,fpTmp);   /* 寫入數據 */
    fread(&student,sizeof(StudentType),1,fp);        /* 繼續讀入圖書信息 */
}
fclose(fp);    fclose(fpTmp);                    /* 關閉文件 */
remove("student.dat");                          /* 刪除文件 */
rename("&student_tmp.dat","student.dat");          /* 更改文件名 */

if ((fp=fopen("student.dat","rb+"))==NULL)
{      /* 打開 employee.dat失敗 */
   printf("打開文件student.dat 失敗!\n");           /* 錯誤信息 */
   system("PAUSE");                  /* 調用庫函數system(),輸出系統提示信息 */
   exit(3);                                       /* 退出程序 */
 }

}

#include /* 標准輸入輸出文件包含預處理命令 /
#include /
標准庫文件包含預處理命令 */

FILE*fp; /* 定義文件指針 */

int main(void) /* 主函數main() /
{
int select; /
工作變量 */

if ((fp=fopen("student.dat","rb+"))==NULL)
{   /* student.dat 文件不存在 */
   if ((fp=fopen("student.dat","wb+"))==NULL)
   {   /* 打開文件失敗 */
       printf("打開文件student.dat失敗!\n");    /* 錯誤信息 */
       system("PAUSE");   /* 調用庫函數system(),輸出系統提示信息 */

       exit(1);            /* 退出程序 */
    }
}

do
{
printf("\n請選擇:\n");
printf("1.增加數據 2.修改數據 3.查找數據 4.刪除數據 5.重組數據 6.退出\n");
scanf("%d",&select); /* 輸入選擇 /
while (select6)
{
printf("請輸入1~6的數:"); /
輸入提示 /
scanf("%d",&select); /
輸入選擇 */
}

switch(select)
{
case 1:
AddData(); /* 增加數據 /
break;
case 2:
ChangeData(); /
修改數據 */
break;

case 3:
SearchData(); /* 查詢數據 /
break;
case 4:
DeleteData(); /
刪除數據,只作刪除標志 /
break;
case 5:
pack(); /
物理上刪除作有標記的記錄 /
break;
}
}while (select!=6); /
選擇6退出循環 */

fclose(fp); /* 關閉文件 */

system("PAUSE"); /* 調用庫函數system(),輸出系統提示信息 /
return 0; /
返回值0,返回操作系統 */
}

最佳回答:


你的目的是什麼,程序有什麼問題都不說,毫無重點貼上一坨shit code,讓人怎麼幫你。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved