可以運行,但是達不到目的,不會修改
程序代碼:
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,讓人怎麼幫你。