关于小型学籍管理系统的c语言程序设计

2025-04-19 23:08:44
推荐回答(1个)
回答1:

#include
#include
#include
#include
typedef struct student
{
int num;
char name[8];
int data[3];
struct student* next;
} student,* linklist;
linklist CreateList(void);
int ListFind(linklist head);
int ListAdd(linklist head);
int DeleteList(linklist head);
int ModifyList(linklist head);
int SaveData(linklist head);
linklist LoadData();
int ListDisplay(linklist head);
int CheckNum(linklist head,int num);
linklist CreateList(void)
{
linklist L;
linklist s,r;
char c;
int flag=1;
L=(student *)malloc(sizeof(student));
L->next=NULL;
r=L;
printf("请输入你要添加的学生的信息:\n");
while(flag)
{
fflush(stdin);
c=getchar();
if(c!='0')
{
s=(student *)malloc(sizeof(student));
printf("学号:");
scanf("%d",&s->num);
printf("姓名:");
scanf("%s",s->name);
printf("数学分数:");
scanf("%d",&s->data[0]);
printf("语文分数:");
scanf("%d",&s->data[1]);
printf("英语分数:");
scanf("%d",&s->data[2]);
printf("退出请按'0',继续按“回车”\n");
r->next=s;
r=s;

}
else
{
flag=0;
r->next=NULL;
}
}

return L;
}

int ListFind(linklist head)
{
int num;
int flag;
char name[8];
linklist p;
p=head;
if(p==NULL)
{
printf("链表中没有数据!\n");
return 0;
}

printf("\n1:按学号查询。\n2:按姓名查询。");
scanf("%d",&flag);
switch(flag)
{
case 1:
{
printf("请输入要查找学生的学号:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==num)
{
printf("学号:");
printf("%d\n",p->num);
printf("姓名:");
printf("%s\n",p->name);
printf("数学分数:");
printf("%d\n",p->data[0]);
printf("语文分数:");
printf("%d\n",p->data[1]);
printf("英语分数:");
printf("%d\n",p->data[2]);
return 0;
}
p=p->next;
}
if(p==NULL)
printf("\n找不到!!!\n");
}
break;
case 2:
{
printf("请输入要查找学生的姓名:");
scanf("%s",&name);
while(p!=NULL)
{
if(!strcmp(p->name,name))
{
printf("学号:");
printf("%d\n",p->num);
printf("姓名:");
printf("%s\n",p->name);
printf("数学分数:");
printf("%d\n",p->data[0]);
printf("语文分数:");
printf("%d\n",p->data[1]);
printf("英语分数:");
printf("%d\n",p->data[2]);
return 0;
}
p=p->next;
}
if(p==NULL)
printf("\n找不到!!!\n");
}
}
return 0;
}

int ListAdd(linklist head)
{
int a=0;
linklist p,s,q=head;
if(head==NULL)
{
printf("\n表不存在,请先建立再添加!\n");
return 0;
}
p=head;
while(p->next!=NULL)
{
p=p->next;
}
s=(student*)malloc(sizeof(student));
printf("添加新数据\n");
printf("学号:");
scanf("%d",&s->num);
printf("姓名:");
scanf("%s",s->name);
printf("数学分数:");
scanf("%d",&s->data[0]);
printf("语文分数:");
scanf("%d",&s->data[1]);
printf("英语分数:");
scanf("%d",&s->data[2]);
s->next=NULL;
return 0;
}

int DeleteList(linklist head)
{
int num;
linklist p,q;
p=head;
q=head;
if(p==NULL)
{
printf("空表,无数据\n");
return 0;
}
printf("请输入要删除学生的学号:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==num)
{
if(p==head)
{
head=head->next;
free(p);
}
else
{
q->next=p->next;
free(p);
}
printf("\n删除成功!!!\n");
getch();
return 0;
}
q=p;
p=p->next;
}
printf("未找到!\n");
return 0;
}

int ModifyList(linklist head)
{
int num;
//int score;
linklist p;
p=head;
if(p==NULL)
{
printf("空表,无数据\n");
return 0;
}
printf("\n请输入要修改学生的学号:");
scanf("%d",&num);
printf(" 学号 姓名 数学成绩 语文成绩 英语成绩 \n");
while(p!=NULL)
{
if(p->num==num)
{

printf("%12d%12s%8d%9d%9d\n",p->num,p->name,p->data[0],p->data[1],p->data[2]);
printf("请输入新成绩");
printf("数学分数:");
scanf("%d",&p->data[0]);
printf("语文分数:");
scanf("%d",&p->data[1]);
printf("英语分数:");
scanf("%d",&p->data[2]);
printf("修改成功!!!\n");
return 0;
}
p=p->next;
}
if(p==NULL)
printf("找不到\n");
return 0;

}
int SaveData(linklist head)
{
char filename[5];
FILE * fp;
linklist p;
p=head;
printf("请输入你要保存的文件名:以*.txt格式!");
scanf("%s",filename);
if((fp=fopen(filename,"at"))==NULL)
{
printf("打开失败!");
return 0;
}
while(p!=NULL)
{
fwrite(p,sizeof(student),1,fp);
p=p->next;
}

fclose(fp);
printf("保存成功!\n");
return 0;
}

linklist LoadData()
{
char filename[5];
printf("请输入你要打开的文件名:以*.txt格式!");
scanf("%s",filename);
FILE *fp;
linklist p,q,h=NULL;
q=p=(student *)malloc(sizeof(student));
if(p==NULL){
printf("空间申请失败!");
return h;
}
h=p;
if((fp=fopen(filename,"a+"))==NULL)
{
printf("打开失败!\n");
return h;
}

while(!feof(fp))
{
if(1!=fread(p,sizeof(student),1,fp))
break;
p->next=(student *)malloc(sizeof(student));
if(!p->next)
{
printf("空间申请失败!\n");
return h;
}
q=p;
p=p->next;
}
q->next=NULL;
fclose(fp);
printf("读取成功!");
return h;
}

int ListDisplay(linklist head)
{
int count=0;
int sum=0;
int sum1=0;
int sum2=0;
int mathHscore=0;
int chineseHscore=0;
int englishHscore=0;
linklist p;
if(head==NULL)
{
printf("表不存在!");
return 0;
}

p=head->next;
if(NULL==head->next)
{
printf("\n链表为空!\n");
return 0;
}
printf(" 学 号 姓 名 数学成绩 语文成绩 英语成绩 \n");
while(p!=NULL)
{

printf("%12d%12s%8d%9d%9d\n",p->num,p->name,p->data[0],p->data[1],p->data[2]);
sum=p->data[0]+p->data[1]+p->data[2];
sum2+=sum;
if(p->data[0]>mathHscore)
mathHscore=p->data[0];
if(p->data[1]>chineseHscore)
chineseHscore=p->data[1];
if(p->data[2]>englishHscore)
englishHscore=p->data[2];
if(sum>sum1)
sum1=sum;
count++;
p=p->next;
}
printf("\n人数:%d\n",count);
printf("平均分:%.2f\n",(float)sum2/count);
printf("数学最高分:%d\n",mathHscore);
printf("语文最高分:%d\n",chineseHscore);
printf("英语最高分:%d\n",englishHscore);
printf("总分最高是:%d\n",sum1);
return 0;
}
int CheckNum(linklist head)
{
int num=0;
printf("请输入学号:");
scanf("%d",&num);
linklist p;
p=head;
while(p!=NULL)
{
if(p->num==num)
return 0;
p=p->next;
}
if(p==NULL)
{
return 1;
}
return 1;
}
void Quit()
{
system("cls");
printf("\n\n\t\t\tbyebye!\n\n");
getch();
exit(0);
}
void main()
{
int c;
int i=5,j=5,m=0,n=0;
linklist head=NULL;
for(;;)
{
system("cls");
printf(" 学生成绩管理系统\n");
printf("\n\n--------------------------------------------------------------------------\n\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");
printf("------------------------------------------------------------------------------\n\n");
printf("请输入你的选择:");
scanf("%d",&c);
switch(c)
{
case 1:
{
m=CheckNum(head);
while(!m)
{
printf("学号有重复!");
m=CheckNum(head);
if(!i--)
{
break;
}
}
head=CreateList();
break;
}
case 2:
ListFind(head);
break;
case 3:
{
n=CheckNum(head);
while(!n)
{
printf("学号有重复!");
n=CheckNum(head);
if(!j--)
{
break;
}
}
ListAdd(head);
break;
}
case 4:
DeleteList(head);
break;
case 5:
ModifyList(head);
break;
case 6:
ListDisplay(head);
break;
case 7:
SaveData(head);
break;
case 8:
head=LoadData();
break;
case 0:
Quit();
break;
}
getch();

}
}
以上回答你满意么?