#include
#include
#include
static int stnum;
char hint[80]="請按提示輸入!";
struct Score
{
double yuwen,math,english,tiyu,sum;
};
struct Student
{
char num[10],name[20],sex[10];
int age;
struct Score score;
}stu[5];
void printstudent(int i)
{
printf("%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].score.yuwen,stu[i].score.math,
stu[i].score.english,stu[i].score.tiyu,stu[i].score.sum);
}
void sethint(const char s)
{
strcpy(hint,s);
}
void printline()
{
int i;
for(i=0;i<80;i++)
putchar('');
}
void printtitle(const char title)
{
int i;
int length=strlen(title);
putchar('');
for(i=0;i<(80-2-length)/2;i++)
putchar(' ');
printf("%s",title);
for(i=i+length-1;i<=80-4;i++)
putchar(' ');
putchar('*');
}
void menu()
{
printline();
printtitle("學生成績管理系統");
printline();
printtitle("輸入指令,執行相應操作");
printtitle("1.學生信息的錄入 2.學生信息的查詢");
printtitle("3.學生信息的刪除 4.學生信息的排序");
printtitle("5.學生信息的修改 6.學生信息的保存");
printtitle("7.學生信息的顯示 8.退出系統");
printline();
printtitle(hint);
printline();
}
void modelmenu(const char *s)
{
printline();
printtitle(s);
printline();
}
void input()
{
int i=0; char l; system("cls");
modelmenu("錄入學生成績");
i=stnum;
printf("已經輸入了%d個學生的信息!",i++);
printf("\n輸入第%d個學員學號:",i);
scanf("%s",stu[i].num); getchar();
printf("\n輸入第%d個學員姓名:",i);
scanf("%s",stu[i].name); getchar();
printf("\n輸入第%d個學員性別:",i);
scanf("%s",stu[i].sex); getchar();
printf("\n輸入第%d個學員年齡:",i);
scanf("%d",&stu[i].age); getchar();
printf("\n輸入第%d個學員語文成績:",i);
scanf("%lf",&stu[i].score.yuwen); getchar();
printf("\n輸入第%d個學員數學成績:",i);
scanf("%lf",&stu[i].score.math); getchar();
printf("\n輸入第%d個學員英語成績:",i);
scanf("%lf",&stu[i].score.english); getchar();
printf("\n輸入第%d個學員體育成績:",i);
scanf("%lf",&stu[i].score.tiyu); getchar();
stu[i].score.sum+=stu[i].score.yuwen+stu[i].score.math+
stu[i].score.english+stu[i].score.tiyu;
printstudent(i);
stnum++;
printf("是否繼續輸入?(Y/N):");
scanf("%c",&l);
if(l=='n'||l=='N')
return;
else if(l=='Y'||l=='y')
{
system("cls");
input();
}
}
void search()
{
int i=0,flag=1;
char str[20],l; system("cls");
modelmenu("查詢學生信息");
printf("請輸入要查找的學員學號:");
scanf("%s",str); getchar();
for(i=0;i
if((strcmp(str,stu[i].num))==0)
{
printstudent(i);
flag=0;
}
if(flag==1)
printf("無此學號!\n");
printf("是否繼續查詢?(Y/N):");
scanf("%c",&l);
if(l=='n'||l=='N')
return;
else
system("cls");
}
void del()
{
int i,j,flag=1;
char str[20],l; system("cls");
modelmenu("刪除學生信息");
printf("請輸入要刪除的學員學號:");
scanf("%s",str); getchar();
for(i=0;i
if((strcmp(str,stu[i].num))==0)
{
printstudent(i);
for(j=i;j
stu[j]=stu[j+1];
flag=0;
printf("刪除成功!\n");
stnum--;
}
if(flag==1)
printf("沒有這個學生!\n");
printf("是否繼續刪除?(Y/N):");
scanf("%c",&l);
if(l=='n'||l=='N')
return;
else
{
system("cls");
del();
}
}
void modi()
{
int i=0,flag=1;
char str[20],l; system("cls");
modelmenu("修改學生信息");
printf("請輸入要修改的學員學號:");
scanf("%s",str); getchar();
for(i=0;i
if((strcmp(str,stu[i].num))==0)
break;
if(i!=5)
{
printline();
printstudent(i);
printline();
printf("\n請輸入修改內容\n");
printf("請修改學生學號");
scanf("%s",stu[i].num); getchar();
printf("請修改學生姓名");
scanf("%s",stu[i].name); getchar();
printf("請修改學生性別");
scanf("%s",stu[i].sex); getchar();
printf("請修改學生年齡");
scanf("%d",&stu[i].age); getchar();
printf("請修改學生語文成績");
scanf("%lf",&stu[i].score.yuwen); getchar();
printf("請修改學生數學成績");
scanf("%lf",&stu[i].score.math); getchar();
printf("請修改學生英語成績");
scanf("%lf",&stu[i].score.english); getchar();
printf("請修改學生體育成績");
scanf("%lf",&stu[i].score.tiyu); getchar();
printf("修改後的學生信息為:\n");
printline();
printstudent(i);
printline();
}
else
printf("沒有這個學生!\n");
printf("是否繼續修改?(Y/N):");
scanf("%c",&l);
if(l=='n'||l=='N')
return;
else
{
system("cls");
modi();
}
}
void sort()
{
struct Student t;
int i,k,p,x,flag=1;
double sum[5],g;
system("cls");
sethint("排序完成");
menu();
for(i=0;i
sum[i]=stu[i].score.yuwen+stu[i].score.math+
stu[i].score.english+stu[i].score.tiyu;
for(k=0;k
{
x=k;
for(p=k+1;p
if(sum[x]>sum[p])
{
x=p;
g=sum[k]; sum[k]=sum[x]; sum[x]=g;
t=stu[k]; stu[k]=stu[x]; stu[x]=t;
}
}
}
void save()
{
FILE *fp; int i;
fp=fopen("c:\student.txt","w");
system("cls"); sethint("保存成功");
menu();
fprintf(fp,"學號\t姓名\t性別\t年齡\t語文\t數學\t英語\t體育\t總分\n");
for(i=5;i>0;i--)
if(stu[i].age!=0)
fprintf(fp,"%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].score.yuwen,stu[i].score.math,
stu[i].score.english,stu[i].score.tiyu,stu[i].score.sum);
fclose(fp);
}
void print()
{
int i; system("cls");
modelmenu("顯示全部學生的信息");
printf("學號\t姓名\t性別\t年齡\t語文\t數學\t英語\t體育\t總分\n");
for(i=5;i>0;i--)
if(stu[i].age!=0)
printf("%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].score.yuwen,stu[i].score.math,
stu[i].score.english,stu[i].score.tiyu,stu[i].score.sum);
while(1)
{
char l;
printf("是否返回主菜單?(Y/N):");
scanf("%c",&l); getchar();
if(l=='Y'||l=='y')
return;
}
}
void main()
{
int as; system("color f5");
do
{
menu();
printf("Input>");
sethint("請按提示輸入!");
scanf("%d",&as); getchar();
if(as8)
as=0;
switch(as)
{
case 0: sethint("輸入錯誤,請重新輸入!"); break;
case 1: input(); break;
case 2: search(); break;
case 3: del(); break;
case 4: sort(); break;
case 5: modi(); break;
case 6: save(); break;
case 7: print(); break;
case 8: break;
default:menu();
}
system("cls");
}
while(as!=8);
}
你的代碼直接copy過來很多錯誤,但我認為問題應該是在你的print()函數裡面,調用printf()時,裡面有個d%但對應的傳入參數是double,而這也影響了後續數據的表示。