C語言讀寫學生成績信息
Ⅰ 用c語言,求學生成績
#include<stdio.h>
#include<stdlib.h>
/*定義全局變數*/
int num;
struct student
{
l name[20];
charong id;
char sex[10];
int math;
int english;
int c_program;
int total;
}stu[41];
/*主菜單*/
void page_title()
{
printf("※※※※※※※※計算機系學生成績管理※※※※※※※※\n");
printf(" 1、請錄入學生成績記錄\n");
printf(" 2、請顯示學生成績記錄\n");
printf(" 3、請修改學生成績記錄\n");
printf(" 4、請刪除學生成績記錄\n");
printf(" 5、請按學號查詢學生成績記錄\n");
printf(" 6、請按學號顯示學生成績記錄\n");
printf(" 7、請按總成績遞減輸出\n");
printf(" 8、請保存\n");
printf(" 0、請退出\n");
}
/*main()
{
system("cls");
pape_title();
}*/
void student_new()//1、錄入學生成績
{
int i;
printf("請輸入學生個數<1-41>:");
scanf("%d",&num);
printf("*****************************************************\n");
printf("學號 姓名 性別 數學 英語 C語言\n");
printf("*****************************************************\n");
for(i=0;i<num;i++)//num個學生
{
scanf("%ld%s%s%d%d%d",&stu[i].id,&stu[i].name,&stu[i].sex,&stu[i].math,&stu[i].english,&stu[i].c_program);
stu[i].total=stu[i].math+stu[i].english+stu[i].c_program;
printf("-----------------------------------------------------\n");
}
}
void show()//2、顯示學生成績
{
int i;
printf("*******************************************************\n");
printf("學號 姓名 性別 數學 英語 C語言 總成績\n");
printf("*******************************************************\n");
for(i=0;i<num;i++)
{
printf("%ld\t%s\t%s\t%d\t%d\t%d\t%d\t\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].math,stu[i].english,stu[i].c_program,stu[i].total);
printf("-------------------------------------------------------\n");
}
}
void student_edit()//3、修改學生信息
{
int i,n;
long stunum;
printf("請輸入要修改的學號:");
scanf("%d",&stunum);
printf("==============以下選項可供選擇===============\n");
printf(" 1、請修改學號\n");
printf(" 2、請修改姓名\n");
printf(" 3、請修改性別\n");
printf(" 4、請修改數學成績\n");
printf(" 5、請修改英語成績\n");
printf(" 6、請修改c語言成績\n");
printf("請輸入要修改的選項:");
scanf("%d",&n);
for(i=0;i<num;i++)
{
if(stu[i].id==stunum)//查找
{
if(n==1)
{
printf("請修改學號:\n");
scanf("%ld",&stu[i].id);
}
if(n==2)
{
printf("請修改姓名:\n");
scanf("%s",&stu[i].name);
}
if(n==3)
{
printf("請修改性別:\n");
scanf("%s",&stu[i].sex);
}
if(n==4)
{
printf("請修改數學成績:\n");
scanf("%d",&stu[i].math);
}
if(n==5)
{
printf("請修改英語成績:\n");
scanf("%d",&stu[i].english);
}
if(n==6)
{
printf("請修改c語言成績:\n");
scanf("%d",&stu[i].c_program);
}
stu[i].total=stu[i].math+stu[i].english+stu[i].c_program;//求總成績
break;
}
if(i==num)
printf("該生信息不存在!");
}
}
void student_del()//*4、刪除一個學生的學號(把後面的數<i+1>往前移,把要刪除的那個數擠掉)【修改與之相似】
{
int i,j,t;
long stunum;
printf("請輸入您要刪除的學號:");
scanf("%d",&stunum);
for(i=0;i<num;i++)
{
if(stu[i].id==stunum)//查找
{
printf("確認要刪除該生信息!\n");
printf("輸入的數為0,其他則退出\n");
scanf("%d",&t);
if(t==0)
{
for(j=i+1;j<num;j++)//刪除
{
stu[j-1]=stu[j];
}
num--;//退學,減少了一個人
break;
}
}
}
if(i==num)
printf("該學生信息不存在\n");
}
void sore_search()//5、按學號查詢學生成績
{
int i=0;
long stunum;//定義學號
printf("請輸入您要查找的學號:");
scanf("%d",&stunum);//輸入要查找到的學號
for(i=0;i<num;i++)
{
if(stu[i].id==stunum)//輸入的學號和所有學生的學號比較,即查找
{
printf("*******************************************************\n");
printf("學號 姓名 性別 數學 英語 C語言 總成績\n");
printf("*******************************************************\n");
printf("%ld\t%s\t%s\t%d\t%d\t%d\t%d\t\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].math,stu[i].english,stu[i].c_program,stu[i].total);
printf("-------------------------------------------------------\n");
break;//找到後馬上停止
}
}
if(i==num)//說明for都執行了一遍,for語句里沒有num;
printf("該生信息不存在");
}
void score_sort()//7、按總成績遞減排序
{
int i,j;
struct student t;
for(i=0;i<=num-2;i++)//輪數//
{
for(j=0;j<=num-2;j++)//相鄰兩個數進行比較
{
if(stu[j].total<stu[j+1].total)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}
}
void save()//8、保存(通過代碼來控制文件,在C盤中)
{
int i;
FILE *fp=fopen("c:\\score.txt","w+");//FILE(一定要大寫):文件類型 *FP代表指針 .txt代表記事本文件 w+:既可以保存,又可以寫
if(fp==NULL)//fp文件若為空
{
printf("文件打開失敗");
exit(1);
}
for(i=0;i<num;i++)
fprintf(fp,"%ld\t%s\t%s\t%d\t%d\t%d\t%d\t\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].math,stu[i].english,stu[i].c_program,stu[i].total);
fclose(fp);//fprintf:保存,fp:保存到fp文件中,fclose:關閉fp文件
}
void load()//1、載入文件函數
{
int i;
int n;//n:記錄數
FILE *fp=fopen("c:\\score.txt","r");//r->read的標志 fopen的功能是打開文件
if(fp==NULL)
{
printf("文件打開失敗");
exit(1);
}
printf("請輸入記錄數:");
scanf("%d",&n);
num=n;//把讀到的n的個數賦給num
for(i=0;i<num;i++)
{
fscanf(fp,"%ld\t%s\t%s\t%d\t%d\t%d\t%d\t\n",&stu[i].id,&stu[i].name,&stu[i].sex,&stu[i].math,&stu[i].english,&stu[i].c_program,&stu[i].total);
}//fscanf:從文件中讀取數據
fclose(fp);//關閉fp文件
}
main()
{
int select;//選擇選項
int flag=1;//退出標志
int user,admin;
printf("★◎★◎★◎====歡迎使用學生信息管理系統!====★◎★◎★◎\n");
printf("========請輸入您的賬號和密碼:========\n");
scanf("%d,%d",&user,&admin);
if(user==123&&admin==123)
{
system("cls");//清屏
page_title();
while(flag!=0)//只要flag!=0,就一直循環
{
printf("請輸出選項:");
scanf("%d",&select);
switch(select)
{
case 1:student_new();break;
case 2:show();break;//顯示
case 3:student_edit();show();break;//修改
case 4:student_del();show();break;
case 5:sore_search();break;
case 6:load();show();break;
case 7:score_sort();show();break;
case 8:save();show();break;
case 0:flag=0;break;
default:break;
}
}
}
else printf("對不起,您輸入的密碼不正確!");
}
Ⅱ 編制一個C語言成績記錄簿,每個學生信息包括:學號、姓名、C語言成績。 具體功能看問題補充
//某班級學生C語言第一次正考的成績存於數據文件score.dat中,記錄了學生學號、姓名和考試成績,bk.dat文件中記錄了補考學生的學號、姓名和補考成績,編寫程序以鏈式存儲結構實現以下要求:
//1、對該班級按成績降序排序並統計成績平均分及每個分數段的人數,結果寫入到result.dat中。
//2、再根據補考成績修改原成績,修改成績後仍按成績降序寫在result.dat的後面。成績修改原則:
//1)補考成績大於等於60,原成績以60分記;2)補考成績小於60,取兩次成績中最高值記。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineMAX50
typedefstruct{
intxh;//學生學號、姓名和考試成績
charna[MAX];
floatcj;
}datatype;
typedefstructNode{
datatypedata;
structNode*next;
}Seqlist;voidprint(Seqlist*l);
voidinitList(Seqlist*lp);/*置一個空表*/
voidcreateList(Seqlist*lp,charstrname[]);/*建立成績順序表*/
voidsave(Seqlist*lp,charstrname[]);/*保存學生順序表到指定文件*/
voidsort_cj(Seqlist*lp);/*降序排序*/
voidaverage(Seqlist*lp);/*算平均分並寫入文件*/
voidbandscore(Seqlist*lp);/*劃分分數段及寫入*/
voidchangescore(Seqlist*lp,Seqlist*bk);/*修改成績*/
intmain()
{
Seqlistlp,bk;
initList(&lp);initList(&bk);
createList(&lp,"score.dat");
createList(&bk,"bk.dat");
sort_cj(&lp);
save(&lp,"result.dat");
average(&lp);
bandscore(&lp);
changescore(&lp,&bk);
sort_cj(&lp);
save(&lp,"result.dat");
return0;
}
/*置一個空表*/
voidinitList(Seqlist*lp)
{
lp->next=0;
lp->data.xh=0;
lp->data.na[0]='