学生成绩管理系统源代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
typedef struct LNode
{
char name[6];
int no;
int yw;
int sx;
int yy;
struct LNode *next;
}LinkList;
struct NameNo
{
int no;
int yw;
int sx;
int total;
char name[6];
}st[10];
FILE *fp,*fp1;
char ch,sname[6];
int x,i,j;
NameNo tmp;
LinkList *p,*s;
printf("\n");
printf("-------------------------------");
printf("学生成绩管理系统");
printf("--------------------------------");
printf("\n\n");
printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入,1");
printf("否则输入0;如果没有,那么程序将终止! 1 or 0?");
scanf("%d",&i);
if(i==0) return 0;
printf("\n\n");
printf("对cj1.txt和cj2.txt进行合成请按‘1’");
scanf("%d",&i);
if(i!=1) return 0;
printf("正在把cj1.txt和cj2.txt中的数据进行合并\n");
printf("......\n.....\n....\n...\n..\n.\n");
if((fp=fopen("c:\\cj1.txt","rt"))==NULL)
{
printf("无cj1.txt文本文件,程序结束。\n");
return 0;
}
fp1=fopen("c:\\cj3.txt","wt");
ch=fgetc(fp);
while(ch!=EOF)
{
fputc(ch,fp1);
ch=fgetc(fp);
}
fclose(fp1);
fclose(fp);
if((fp=fopen("c:\\cj2.txt","rt"))==NULL)
{
printf("无cj12.txt文本文件,程序结束。\n");
return 0;
}
fp1=fopen("c:\\cj3.txt","a");
for(i=0;i<37;i++)
fgetc(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
fputc(ch,fp1);
ch=fgetc(fp);
}
fclose(fp1);
fclose(fp);
printf("合并成功!现在你可以在C盘根目录下看到一个cj3.txt文件\n");
printf("\n\n");
p=(LinkList *)malloc(sizeof(LinkList));
p->next=NULL;
fp=fopen("c:\\cj3.txt","rt");
for(i=0;i<36;i++)
fgetc(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
s=(LinkList *)malloc(sizeof(LinkList));
fgets(s->name,7,fp);
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->no=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->yw=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->sx=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->yy=x;
s->next=p->next;
p->next=s;
ch=fgetc(fp);
}
fclose(fp);
printf("对cj3.txt中有不及格的学生信息生成cj4.txt请按‘1’");
scanf("%d",&i);
if(i!=1) return 0;
printf("正在生成cj4.txt\n");
printf("......\n.....\n....\n...\n..\n.\n");
if(i==1)
fp=fopen("c:\\cj4.txt","wt");
fputs("姓 名 学号 语文 数学 英语",fp);
fclose(fp);
fp=fopen("c:\\cj4.txt","a");
s=p->next;
while(s!=NULL)
{
if(s->yw<60
[解决办法]
s->sx<60
[解决办法]
s->yy<60)
{
ch='\n';
fputc(ch,fp);
fputs(s->name,fp);
for(i=0;i<5;i++)
{
ch=' ';
fputc(ch,fp);
}
ch=s->no/10+48;
fputc(ch,fp);
ch=s->no-(s->no/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch=' ';
fputc(ch,fp);
}
ch=s->yw/10+48;
fputc(ch,fp);
ch=s->yw-(s->yw/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch=' ';
fputc(ch,fp);
}
ch=s->sx/10+48;
fputc(ch,fp);
ch=s->sx-(s->sx/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch=' ';
fputc(ch,fp);
}
ch=s->yy/10+48;
fputc(ch,fp);
ch=s->yy-(s->yy/10)*10+48;
fputc(ch,fp);
s=s->next;
}
else
s=s->next;
}
fclose(fp);
printf("生成成功!现在你可以在C盘根目录下看到一个cj4.txt文件");
printf("\n\n");
s=p->next;
for(i=0;i<10;i++)
{
st[i].no=s->no;
st[i].yw=s->yw;
st[i].sx=s->sx;
st[i].total=s->yw+s->sx+s->yy;
for(j=0;j<7;j++)
st[i].name[j]=s->name[j];
s=s->next;
}
printf("用直接插入法排序请按‘1’:");
scanf("%d",&i);
printf("\n\n");
if(i==1)
{
for(i=1;i<10;i++)
{
tmp=st[i];
j=i-1;
while(j>=0&&tmp.total>st[j].total)
{
st[j+1]=st[j];
j--;
}
st[j+1]=tmp;
}
printf(" 直接插入法排序后总分从大到小排序为\n");
printf("\n\n");
printf("姓 名 学号 语文 数学 英语 总分\n");
for(i=0;i<10;i++)
{
if(st[i].no<10)
{
printf("%s ",st[i].name);
printf("%d",0);
printf("%d ",st[i].no);
printf("%d ",st[i].yw);
printf("%d ",st[i].sx);
printf("%d ",st[i].total-st[i].yw-st[i].sx);
printf("%d\n",st[i].total);
printf("\n");
}
else
{
printf("%s ",st[i].name);
printf("%d ",st[i].no);
printf("%d ",st[i].yw);
printf("%d ",st[i].sx);
printf("%d ",st[i].total-st[i].yw-st[i].sx);
printf("%d\n",st[i].total);
printf("\n");
}
}
}
printf("将排好序的数组打乱\n");
printf("\n");
s=p->next;
for(i=0;i<10;i++)
{
st[i].no=s->no;
st[i].yw=s->yw;
st[i].sx=s->sx;
st[i].total=s->yw+s->sx+s->yy;
for(j=0;j<7;j++)
st[i].name[j]=s->name[j];
s=s->next;
}
printf("用冒泡法排序请按‘1’:");
scanf("%d",&i);
printf("\n\n");
if(i==1)
{
for(i=0;i<9;i++)
{
for(j=9;j>i;j--)
if(st[j].total>st[j-1].total)
{
tmp=st[j];
st[j]=st[j-1];
st[j-1]=tmp;
}
}
printf(" 冒泡法排序后总分从大到小排序为\n");
printf("\n\n");
printf("姓 名 学号 语文 数学 英语 总分\n");
for(i=0;i<10;i++)
{
if(st[i].no<10)
{
printf("%s ",st[i].name);
printf("%d",0);
printf("%d ",st[i].no);
printf("%d ",st[i].yw);
printf("%d ",st[i].sx);
printf("%d ",st[i].total-st[i].yw-st[i].sx);
printf("%d\n",st[i].total);
printf("\n");
}
else
{
printf("%s ",st[i].name);
printf("%d ",st[i].no);
printf("%d ",st[i].yw);
printf("%d ",st[i].sx);
printf("%d ",st[i].total-st[i].yw-st[i].sx);
printf("%d\n",st[i].total);
printf("\n");
}
}
}
printf("\n");
printf("请输入你要查找的学生姓名:(注意:如果名字为两个字,则中间用两个空格!)\n");
do{
x=1;
if(i==1)
printf("输入姓名:");
getchar();
for(i=0;i<7;i++)
sname[i]=getchar();
for(i=0;i<10;i++)
{
for(j=0;st[i].name[j]==sname[j];j++){}
if(j==6)
{
printf(" 数组中查找结果");
printf("\n\n");
printf("姓 名 学号 语文 数学 英语 总分\n");
printf("%s",st[i].name);
printf(" %d",st[i].no);
printf(" %d",st[i].yw);
printf(" %d",st[i].sx);
printf(" %d",st[i].total-st[i].yw-st[i].sx);
printf(" %d\n\n",st[i].total);
x=0;
}
}
if(x!=0)
printf(" 查无此人!\n");
s=p->next;
while(s!=NULL)
{
for(i=0;s->name[i]==sname[i];i++){}
if(i==6)
{
printf(" 链表中查找结果");
printf("\n\n");
printf("姓 名 学号 语文 数学 英语 总分\n");
printf("%s",s->name);
printf(" %d",s->no);
printf(" %d",s->yw);
printf(" %d",s->sx);
printf(" %d",s->yy);
printf(" %d\n\n",s->yw+s->sx+s->yy);
x=0;
}
s=s->next;
}
if(x!=0)
printf(" 查无此人!\n");
i=0;
printf("继续查找请按‘1’");
scanf("%d",&i);
}
while(i==1);
printf("\n\n");
printf("-----------------------------谢谢使用!--------------------------------\n\n");
}
求大神帮忙改改这程序怎么运行的时候老是出乱码?