学生信息管理系统C语言编程Word文档格式.doc
《学生信息管理系统C语言编程Word文档格式.doc》由会员分享,可在线阅读,更多相关《学生信息管理系统C语言编程Word文档格式.doc(10页珍藏版)》请在冰点文库上搜索。
xxxxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
……………………
共修:
xx科,实得总学分为:
xxx
(3)删除功能:
提供待删除学生的学号,则在student.txt和score.dat中删除所有与该学生有关的信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
【程序设计的具体说明】
(1)将与两个文件对应的信息分别定义两种结构体类型来表示,也可以用类来定义;
(2)对score.dat文件的写入,从键盘上输入的是前七项,后两项数据项根据计算方法算出后,得到完整的结构体信息,作为一个整体写入(可调用write函数)。
(3)删除功能中可以将删除相关信息后得到的文件生成新文件存储,也可以在原文件的基础上作删除
(4)可以用面向过程方法或是面向对象的方法实现。
(5)主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。
#include"
stdio.h"
stdlib.h"
string.h"
#defineN3
typedefstructz1
{
charno[11];
charname[15];
intscore[N];
floatsum;
floataverage;
intorder;
structz1*next;
}STUDENT;
STUDENT*init();
STUDENT*create();
STUDENT*del(STUDENT*h);
voidprint(STUDENT*h);
voidsearch1(STUDENT*h);
voidsearch2(STUDENT*h);
STUDENT*insert(STUDENT*h);
voidsort(STUDENT*h);
voidsave(STUDENT*h);
voidtongji(STUDENT*h);
intmenu_select();
STUDENT*load();
voidinputs(char*prompt,char*s,intcount);
main()
inti;
STUDENT*head;
head=init();
for(;
;
)
{
switch(menu_select())
{
case0:
head=init();
break;
case1:
head=create();
case2:
head=insert(head);
case3:
save(head);
case4:
print(head);
case5:
search1(head);
case6:
head=del(head);
case7:
sort(head);
case8:
tongji(head);
case9:
search2(head);
case10:
exit(0);
}
}
}
intmenu_select()
char*menu[]={"
************菜单************"
"
0.初始化链表"
1.输入学生成绩"
2.插入学生成绩"
3.保存学生记录"
4.显示学生记录"
5.按学号查找学生信息"
6.删除指定学号的学生信息"
7.按某一门课对学生成绩排序"
8.统计某门课程的学生成绩"
9.按姓名查找学生信息"
10.退出系统"
};
chars[3];
intc,i;
for(i=0;
i<
=11;
i++)
printf("
%s\n"
menu[i]);
do
printf("
\n请选择0~10中的某一个选项\n"
);
scanf("
%s"
s);
c=atoi(s);
}while(c<
0||c>
10);
returnc;
STUDENT*init()
returnNULL;
STUDENT*create()
ints;
STUDENT*h=NULL,*info;
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
info)
printf("
\n内存不足"
returnNULL;
inputs("
输入学号:
"
info->
no,11);
if(info->
no[0]=='
@'
)break;
输入姓名:
name,15);
开始输入%d门课的成绩\n"
N);
s=0;
for(i=0;
N;
do{
printf("
第%d门分数:
i+1);
scanf("
%d"
&
info->
score[i]);
if(info->
score[i]>
100||info->
score[i]<
0)
输入成绩错误,请重新输入:
\n"
}while(info->
0);
s=s+info->
score[i];
info->
sum=s;
average=(float)s/N;
order=0;
next=h;
h=info;
returnh;
voidinputs(char*prompt,char*s,intcount)
charp[255];
printf(prompt);
p);
if(strlen(p)>
count)
\n太长了!
}while(strlen(p)>
count);
strcpy(s,p);
voidprint(STUDENT*h)
inti=0;
STUDENT*p;
p=h;
\n\n\n***********************学生***********************\n"
|序号|学号|姓名|语文|英语|数学|总分|平均分|名次|\n"
|---|-------|--------|----|----|----|------|------|---|\n"
while(p!
=NULL)
i++;
|%3d|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n"
i,p->
no,p->
name,p->
score[0],p->
score[1],p->
score[2],p->
sum,p->
average,p->
order);
p=p->
next;
***********************end***********************\n"
STUDENT*del(STUDENT*h)
STUDENT*p,*q;
chars[11];
请输入要删除的学生的学号\n"
scanf("
q=p=h;
while(strcmp(p->
no,s)&
&
p!
q=p;
if(p==NULL)
\n链表中没有学号为%s的学生\n"
else
\n\n\n***********************找到了***********************\n"
|学号|姓名|语文|英语|数学|总分|平均分|名次|\n"
|----------|----------|----|----|----|------|------|---|\n"
|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n"
p->
请按任意键删除\n"
getchar();
if(p==h)
h=p->
elseq->
next=p->
free(p);
\n已经删除学号为%s的学生\n"
不要忘了保存数据\n"
voidsearch1(STUDENT*h)
请输入你要查找的同学的学号\n"
p=p->
'
n没有学号为%s的学生\n"
|学号|姓名|语文|英语|数学|总分|平均分|名次|\n"
|----------|-----------|----|----|----|------|------|---|\n"
voidsearch2(STUDENT*h)
请输入你要查找的同学的姓名\n"
name,s)&
\n没有姓名为%s的学生\n"
|学号|姓名|语文|英语|数学|总分|平均分|名次|\n"
STUDENT*insert(STUDENT*h)
STUDENT*p,*q,*info;
ints1,i;
请输入插入点的学生学号\n"
\n请输入新的学生信息\n"
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
\n内存不足!
returnNULL;
inputs("
请输入%d门课的分数\n"
s1=0;
do{
分数%d"
scanf("
if(info->
输入数据有误,请重新输入\n"
}while(info->
s1=s1+info->
info->
sum=s1;
average=(float)s1/N;
next=NULL;
q=h;
{q=p;
p=p->
h=info;
next=info;
next=p;
q->
\n已经插入了%s这个学生\n"
name);
----不要忘了存盘啊--\n"
return(h);
voidsave(STUDENT*h)
FILE*fp;
charoutfile[10];
请输入保存文件的文件名,例如c:
\\f1\\te.txt:
outfile);
if((fp=fopen(outfile,"
wb"
))==NULL)
不能打开文件\n"
exit
(1);
\n正在保存......\n"
fwrite(p,sizeof(STUDENT),1,fp);
fclose(fp);
------保存成功!
!
------\n"
voidsort(STUDENT*h)
inti=0,j;
STUDENT*p,*q,*t,*h1;
请输入要按哪门课程的编号来排序:
(0.语文1.数学2.英语)\n"
j);
h1=h->
h->
while(h1!
t=h1;
h1=h1->
p=h;
q=h;
while(t->
score[j]<
p->
score[j]&
q=p;
p=p->
if(p==q)
t->
h=t;
else
q->
next=t;
p->
order=i;
print(h);
printf("
排序成功!
voidtongji(STUDENT*h)
inta,b,i;
请输入课程编号\n"
i);
请输入分数段:
%d,%d"
a,&
b);
printf("
if(p->
=a&
=b)