#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//成績結構體
struct score
{
char ID[11];
char Name[25];
char banji[10];
int gs;
int wy;
int wl;
int cx;
int sx;
int zz;
};
//函式宣告
void welcome();//主選單
void yl(int); //成績預覽
void cx(int); //成績查詢
void zj(int); //增加成績
int sc(int); //洗掉成績
int xg(int);//修改成績
void bccj(void);//保存成績并退出
void showcxmenu(void);//二級選單,查詢選單
void xmcx(int n);//姓名查詢
void xhcx(int);//學號查詢
//main函式
int main()
{
int flag,n=0,count=0;//flag標志位,count計數,當前總人數
//-------------判斷檔案里面有多少條記錄--------------------//
FILE *fp;
fp=fopen("111.txt","a+");
if(fp==NULL)
{
printf("打開檔案失敗,請重試!\n");
getchar();
fclose(fp);
exit(0);
}
int c = 0;
while(!feof(fp))
{
char cc = fgetc(fp);
if(cc==EOF)
{
break;
}
//輸出字符
// putchar(cc);
c++;
}
count = c/14;
// printf("%d", count);
// getch();
fclose(fp);
//---------------------------------//
do
{
welcome();
scanf("%d",&flag);//錄入
switch(flag)
{
case 1: printf("請輸入您要錄入的人數:");
scanf("%d",&n);
zj(n);
count += n;break;
case 2: count=sc(count);printf("%d", count);break;
case 3: xg(count);break;
case 4: cx(count);break;
case 5: yl(count);break;
case 0: bccj();break;
default:printf("輸入錯誤,請重試!\n");getch();
}
}while(flag!=0);
getch();
return 0;
}
//0顯示選單
void welcome()
{
// system("cls");
printf("*************歡迎使用學生成績管理系統*****************\n");
printf("*----------------------------------------------------*\n");
printf("* 1.錄入成績 *\n");
printf("* 2.洗掉成績 *\n");
printf("* 3.修改成績 *\n");
printf("* 4.成績查詢 *\n");
printf("* 5.顯示成績資訊 *\n");
printf("* 0.保存資訊并退出系統 *\n");
printf("**********************歡迎使用************************\n");
printf("選擇操作<0-6> \n");
return;
}
//1增加成績
void zj(int n)
{
struct score stu[100];
FILE *fp;
fp=fopen("111.txt","a+");
if(fp==NULL)
{
printf("打開檔案失敗,請重試!\n");
getchar();
fclose(fp);
exit(0);
}
printf("請輸入全部學生的學號,姓名,班級,高數成績,外語成績,物理成績,程式成績,思修成績,中傳成績;\n");
int i;
for(i=0;i<n;i++)
{
printf("----第%d個學生----\n", i+1);
printf("學號:");
scanf("%s",&stu[i].ID);
printf("姓名:");
scanf("%s,",&stu[i].Name);
printf("班級:");
scanf("%s",&stu[i].banji);
printf("高數成績:");
scanf("%d",&stu[i].gs);
printf("外語成績:");
scanf("%d",&stu[i].wy);
printf("物理成績:");
scanf("%d",&stu[i].wl);
printf("程式成績:");
scanf("%d",&stu[i].cx);
printf("思修成績:");
scanf("%d",&stu[i].sx);
printf("中傳成績:");
scanf("%d",&stu[i].zz);
//寫入資料
fprintf(fp,"%s %s %s %d %d %d %d %d %d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);}
fclose(fp);
printf("添加學生成功,請按任意鍵回傳\n");
getchar();
}
//2洗掉成績
int sc(int n)
{
struct score stu[100];
struct score sub[99];//洗掉后的結構體陣列
char ID[10];//學號
int find=0;
printf("請輸入你要洗掉的學生學號:");
scanf("%s", &ID);
FILE *fp;
fp=fopen("111.txt","r");
if(fp==NULL)
{
printf("打開檔案失敗,請聯系管理員\n");
getchar();
return -1;
}
int c=0;
int index=0;//用于記錄目標序號
while(!feof(fp))//不為空
{
fscanf(fp,"%s %s %s %d %d %d %d %d %d\n",&stu[c].ID,&stu[c].Name,&stu[c].banji,&stu[c].gs,&stu[c].wy,&stu[c].wl,&stu[c].cx,&stu[c].sx,&stu[c].zz);
if(strcmp(ID,stu[c].ID)==0)
{
find = 1;//根據學號查找,找到賦值為1
index = c;//記錄編號
}
c++;
}
fclose(fp);
if(n==0)
{
printf("已經沒有學生成績資訊了,請按任意鍵回傳\n");
getch();
welcome();
return n;
}
if(find==0)
{
printf("沒有該學生成績資訊,請按任意鍵回傳\n");
getch();
welcome();
return n;
}
else
{
int i;
//洗掉
for(i=0;i<c;i++)
{
if(i < index)
{
sub[i] = stu[i];
}
else
{
sub[i] = stu[i+1];
}
}
fp=fopen("111.txt","w");
//寫入資料
for(i=0;i<c-1;i++)
{
fprintf(fp,"%s %s %s %d %d %d %d %d %d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);
}
fclose(fp);
printf("學號為%s的學生成績洗掉成功,請按任意鍵回傳\n",ID);
getch();
welcome();
return n-1;
}
}
//3修改成績
int xg(int n)
{
struct score stu[100];
FILE *fp;
char ID[10];
int find=0;
printf("請輸入要修改的學生學號:");
scanf("%s",ID);
fp=fopen("111.txt","r");
if(fp==NULL)
{
printf("檔案打開失敗,請聯系管理員\n");
getch();
return -1;
}
int c=0;
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %d %d %d %d %d\n",&stu[c].ID,&stu[c].Name,&stu[c].banji,&stu[c].gs,&stu[c].wy,&stu[c].wl,&stu[c].cx,&stu[c].sx,&stu[c].zz);
if(strcmp(ID,stu[c].ID)==0)
{
find=1;
//修改操作
printf("找到你要修改成績的同學,請輸入他的成績:\n");
printf("高數成績: %d,新成績為:",stu[c].gs);
scanf("%d",&stu[c].gs);
printf("外語成績: %d,新成績為:",stu[c].wy);
scanf("%d",&stu[c].wy);
printf("物理成績: %d,新成績為:",stu[c].wl);
scanf("%d",&stu[c].wl);
printf("程式成績: %d,新成績為:",stu[c].cx);
scanf("%d",&stu[c].cx);
printf("思修成績: %d,新成績為:",stu[c].sx);
scanf("%d",&stu[c].sx);
printf("中傳成績: %d,新成績為:",stu[c].zz);
scanf("%d",&stu[c].zz);
}
c++;
}
fclose(fp);
if(find==0)
{
printf("沒有找到要洗掉的學生記錄,請按任意鍵退出\n");
getch();
}
else
{
fp=fopen("111.txt","w");
int i;
for(i=0;i<n;i++)
{
//更新資料
fprintf(fp,"%s %s %s %d %d %d %d %d %d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);
}
fclose(fp);
printf("學號為%s同學的成績已經修改成功,請按任意鍵回傳",ID);
getch();
}
welcome();
return 1;
}
//4成績查詢
void cx(int n) //n全班人數
{
int k;
do
{
showcxmenu();
scanf("%d",&k);
switch(k)
{
case 1:xhcx(n);break;//學號查詢
case 2:xmcx(n);break;//姓名查詢
case 0:break;
default:printf("輸入錯誤,請重新選擇\n");
getch();
}
}while(k!=0);
return;
}
//4.0查詢選單
void showcxmenu()
{
// system("cls");
printf("*----------------------------------------------------*\n");
printf("* 根據制定查詢的內容 *\n");
printf("*----------------------------------------------------*\n");
printf("* 1: 按學號查詢 *\n");
printf("* 2: 按姓名查詢 *\n");
printf("* 0: 退出查詢系統,回傳主系統 *\n");
printf("*----------------------------------------------------*\n");
printf("選擇操作<0-3> \n");
}
//4.1學號查詢
void xhcx(int n)
{
struct score stu[100];
char ID[10];
printf("請輸入你要查詢學生的學號:");
scanf("%s",&ID);
FILE *fp;
fp=fopen("111.txt ","r");
if(fp==NULL)
{
printf("打開檔案失敗!\n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %s %d %d %d %d %d %d\n",stu[c].ID,stu[c].Name,stu[c].banji,&stu[c].gs,&stu[c].wy,&stu[c].wl,&stu[c].cx,&stu[c].sx,&stu[c].zz);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(ID,stu[i].ID)==0)
{
printf("學號\t姓名\t語文\t數學\t英語\t總分\t名次\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);
printf("按任意鍵回傳\n");
getch();
fclose(fp);
return;
}
}
printf("未找到要查詢學生的成績,請重試!\n");
getch();
fclose(fp);
return;
}
//4.2姓名查詢
void xmcx(int n)
{
struct score stu[100];
char Name[25];
printf("請輸入你要查詢學生的姓名:");
scanf("%s",&Name);
FILE *fp;
fp=fopen("111.txt ","r");
if(fp==NULL)
{
printf("打開檔案失敗!\n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp)){
fscanf(fp,"%s %s %s %d %d %d %d %d %d\n",&stu[c].ID,&stu[c].Name,&stu[c].banji,&stu[c].gs,&stu[c].wy,&stu[c].wl,&stu[c].cx,&stu[c].sx,&stu[c].zz);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(Name,stu[i].Name)==0)
{
printf("學號\t姓名\t班級\t高數\t外語\t物理\t程式\t思修\t中傳\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);
printf("按任意鍵回傳\n");
getch();
fclose(fp);
return;
}
}
printf("未找到要查詢學生的成績,請重試!\n");
getch();
fclose(fp);
return;
}
//5預覽成績資訊
void yl(int n)
{
struct score stu[200];
int i;
printf("成績資訊如下:\n");
FILE *fp;
fp=fopen("111.txt","r");
if(fp==NULL)
{
printf("打開檔案失敗,請重試!\n");
getch();
fclose(fp);
exit(0);
}
printf("學號\t\t 姓名\t\t 班級\t高數\t外語\t物理\t程式\t思修\t中傳\n");
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %d %d %d %d %d\n",stu[c].ID,stu[c].Name,stu[c].banji,&stu[c].gs,&stu[c].wy,&stu[c].wl,&stu[c].cx,&stu[c].sx,&stu[c].zz);
c++;
}
if(n!=0){//人數不為0
for(i=0;i<c;i++)
{
printf("%-18s%-18s%-10s\t%d\t%d\t%d\t%d\t%d\t%d\n",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);
}
}
fclose(fp);
printf("顯示完畢 ,請按任意鍵回傳\n");
getch();
return;
}
//0保存資訊并退出系統
void bccj()
{
printf("感謝您的使用,歡迎下次使用!\n");
getch();
return;
}
代碼的洗掉成績、修改成績以及成績查詢不能運行,各位大佬幫忙看一下
uj5u.com熱心網友回復:
把scanf最后的\n都去掉uj5u.com熱心網友回復:
請問大佬說的是fscanf嗎?
uj5u.com熱心網友回復:
請問大佬說的是fscanf嗎?
uj5u.com熱心網友回復:
對,參考一下這個
https://blog.csdn.net/zhanghaiyang9999/article/details/107032563
uj5u.com熱心網友回復:
洗掉后還是不管用
uj5u.com熱心網友回復:
VC2008 所有功能正常呀..uj5u.com熱心網友回復:
除了一些小BUG,VS2012正常運行。uj5u.com熱心網友回復:
我用的是dev ,5.6.3版本的uj5u.com熱心網友回復:
主函式當前總人數為啥要除14啊 求大佬講解轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/14267.html
標籤:C語言
下一篇:貪心演算法實作最短路徑
