C语言程序设计源程序学生成绩管理Word格式文档下载.docx
- 文档编号:19839751
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:21
- 大小:21.51KB
C语言程序设计源程序学生成绩管理Word格式文档下载.docx
《C语言程序设计源程序学生成绩管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计源程序学生成绩管理Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
/*插入记录*/
voidappend();
/*追加记录*/
voidcopy();
/*复制文件*/
STUDENT*sort(STUDENT*h);
/*排序*/
STUDENT*index(STUDENT*h);
/*索引*/
voidtotal(STUDENT*h);
/*分类合计*/
intmenu_select();
/*菜单函数*/
/******主函数开始*******/
main()
inti;
STUDENT*head;
/*链表定义头指针*/
head=init();
/*初始化链表*/
clrscr();
/*清屏*/
for(;
;
)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{/*值不同,执行的函数不同,break不能省略*/
case0:
head=init();
break;
/*执行初始化*/
case1:
head=create();
case2:
head=delete(head);
case3:
print(head);
/*显示全部记录*/
case4:
search(head);
/*查找记录*/
case5:
save(head);
/*保存文件*/
case6:
head=load();
break;
/*读文件*/
case7:
computer(head);
case8:
head=insert(head);
case9:
copy();
case10:
head=sort(head);
case11:
append();
case12:
head=index(head);
case13:
total(head);
case14:
exit(0);
/*如菜单返回值为14程序结束*/
}
}
/*菜单函数,返回值为整数*/
menu_select()
char*menu[]={"
***************MENU***************"
/*定义菜单字符串数组*/
"
0.initlist"
/*初始化*/
1.Enterlist"
/*输入记录*/
2.Deletearecordfromlist"
/*从表中删除记录*/
3.printlist"
/*显示单链表中所有记录*/
4.Searchrecordonname"
/*按照姓名查找记录*/
5.Savethefile"
/*将单链表中记录保存到文件中*/
6.Loadthefile"
/*从文件中读入记录*/
7.computethescore"
/*计算所有学生的总分和均分*/
8.insertrecordtolist"
/*插入记录到表中*/
9.copythefiletonewfile"
/*复制文件*/
10.sorttomakenewfile"
/*排序*/
11.appendrecordtofile"
/*追加记录到文件中*/
12.indexonnomber"
/*索引*/
13.totalonnomber"
/*分类合计*/
14.Quit"
};
/*退出*/
chars[3];
/*以字符形式保存选择号*/
intc,i;
/*定义整形变量*/
gotoxy(1,25);
/*移动光标*/
printf("
pressanykeyentermenu......\n"
);
/*压任一键进入主菜单*/
getch();
/*输入任一键*/
/*清屏幕*/
gotoxy(1,1);
textcolor(YELLOW);
/*设置文本显示颜色为黄色*/
textbackground(BLUE);
/*设置背景颜色为蓝色*/
gotoxy(10,2);
putch(0xc9);
/*输出左上角边框┏*/
for(i=1;
i<
44;
i++)
putch(0xcd);
/*输出上边框水平线*/
putch(0xbb);
/*输出右上角边框┓*/
for(i=3;
20;
gotoxy(10,i);
putch(0xba);
/*输出左垂直线*/
gotoxy(54,i);
}/*输出右垂直线*/
gotoxy(10,20);
putch(0xc8);
/*输出左上角边框┗*/
/*输出下边框水平线*/
putch(0xbc);
/*输出右下角边框┛*/
window(11,3,53,19);
/*制作显示菜单的窗口,大小根据菜单条数设计*/
for(i=0;
16;
i++)/*输出主菜单数组*/
gotoxy(10,i+1);
cprintf("
%s"
menu[i]);
textbackground(BLACK);
/*设置背景颜色为黑色*/
window(1,1,80,25);
/*恢复原窗口大小*/
gotoxy(10,21);
do{
\nEnteryouchoice(0~14):
"
/*在菜单窗口外显示提示信息*/
scanf("
s);
/*输入选择项*/
c=atoi(s);
/*将输入的字符串转化为整形数*/
}while(c<
0||c>
14);
/*选择项不在0~14之间重输*/
returnc;
/*返回选择项,主程序根据该数调用相应的函数*/
STUDENT*init()
returnNULL;
/*创建链表*/
STUDENT*create()
ints;
STUDENT*h=NULL,*info;
/*STUDENT指向结构体的指针*/
)
info=(STUDENT*)malloc(sizeof(STUDENT));
/*申请空间*/
if(!
info)/*如果指针info为空*/
\noutofmemory"
/*输出内存溢出*/
/*返回空指针*/
inputs("
enterno:
info->
no,11);
/*输入学号并校验*/
if(info->
no[0]=='
@'
)break;
/*如果学号首字符为@则结束输入*/
entername:
name,15);
/*输入姓名,并进行校验*/
pleaseinput%dscore\n"
N);
/*提示开始输入成绩*/
s=0;
/*计算每个学生的总分,初值为0*/
N;
i++)/*N门课程循环N次*/
score%d:
i+1);
/*提示输入第几门课程*/
%d"
&
info->
score[i]);
/*输入成绩*/
score[i]>
100||info->
score[i]<
0)/*确保成绩在0~100之间*/
baddata,repeatinput\n"
/*出错提示信息*/
}while(info->
0);
s=s+info->
score[i];
/*累加各门课程成绩*/
info->
sum=s;
/*将总分保存*/
average=(float)s/N;
/*求出平均值*/
order=0;
/*未排序前此值为0*/
next=h;
/*将头结点做为新输入结点的后继结点*/
h=info;
/*新输入结点为新的头结点*/
return(h);
/*返回头指针*/
/*输入字符串,并进行长度验证*/
inputs(char*prompt,char*s,intcount)
charp[255];
printf(prompt);
/*显示提示信息*/
p);
/*输入字符串*/
if(strlen(p)>
count)printf("
\ntoolong!
\n"
/*进行长度校验,超过count值重输入*/
}while(strlen(p)>
count);
strcpy(s,p);
/*将输入的字符串拷贝到字符串s中*/
/*输出链表中结点信息*/
voidprint(STUDENT*h)
inti=0;
/*统计记录条数*/
STUDENT*p;
/*移动指针*/
p=h;
/*初值为头指针*/
\n\n\n****************************STUDENT********************************\n"
|rec|nO|name|sc1|sc2|sc3|sum|ave|order|\n"
|---|----------|---------------|----|----|----|--------|-------|-----|\n"
while(p!
=NULL)
i++;
|%3d|%-10s|%-15s|%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*delete(STUDENT*h)
STUDENT*p,*q;
/*p为查找到要删除的结点指针,q为其前驱指针*/
chars[11];
/*存放学号*/
pleasedeletedno\n"
/*输入要删除记录的学号*/
q=p=h;
/*给q和p赋初值头指针*/
while(strcmp(p->
no,s)&
&
p!
=NULL)/*当记录的学号不是要找的,或指针不为空时*/
q=p;
/*将p指针值赋给q作为p的前驱指针*/
/*将p指针指向下一条记录*/
if(p==NULL)/*如果p为空,说明链表中没有该结点*/
\nlistno%sstudent\n"
else/*p不为空,显示找到的记录信息*/
*****************************havefound***************************\n"
|no|name|sc1|sc2|sc3|sum|ave|order|\n"
|----------|---------------|----|----|----|--------|-------|-----|\n"
|%-10s|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n"
p->
no,
p->
score[1],p->
sum,
********************************end*******************************\n"
/*压任一键后,开始删除*/
if(p==h)/*如果p==h,说明被删结点是头结点*/
h=p->
/*修改头指针指向下一条记录*/
else
q->
next=p->
/*不是头指针,将p的后继结点作为q的后继结点*/
free(p);
/*释放p所指结点空间*/
\nhavedeletedNo%sstudent\n"
Don'
tforgetsave\n"
/*提示删除后不要忘记保存文件*/
/*查找记录*/
voidsearch(STUDENT*h)
/*移动指针*/
chars[15];
/*存放姓名的字符数组*/
pleaseenternameforsearch\n"
/*输入姓名*/
/*将头指针赋给p*/
name,s)&
=NULL)/*当记录的姓名不是要找的,或指针不为空时*/
/*移动指针,指向下一结点*/
if(p==NULL)/*如果指针为空*/
/*显示没有该学生*/
else/*显示找到的记录信息*/
\n\n*****************************havefound***************************\n"
|nO|name|sc1|sc2|sc3|sum|ave|order|\n"
/*插入记录*/
STUDENT*insert(STUDENT*h)
STUDENT*p,*q,*info;
/*p指向插入位置,q是其前驱,info指新插入记录*/
/*保存插入点位置的学号*/
ints1,i;
pleaseenterlocationbeforetheno\n"
/*输入插入点学号*/
\npleasenewrecord\n"
/*提示输入记录信息*/
info)
/*如没有申请到,内存溢出*/
/*输入学号*/
/*提示输入分数*/
s1=0;
/*保存新记录的总分,初值为0*/
i++)/*N门课程循环N次输入成绩*/
do{/*对数据进行验证,保证在0~100之间*/
0)
s1=s1+info->
/*计算总分*/
sum=s1;
/*将总分存入新记录中*/
average=(float)s1/N;
/*计算均分*/
/*名次赋值0*/
next=NULL;
/*设后继指针为空*/
/*将指针赋值给p*/
q=h;
/*将指针赋值给q*/
=NULL)/*查找插入位置*/
/*保存指针p,作为下一个p的前驱*/
/*将指针p后移*/
if(p==NULL)/*如果p指针为空,说明没有指定结点*/
if(p==h)/*同时p等于h,说明链表为空*/
/*新记录则为头结点*/
next=info;
/*p为空,但p不等于h,将新结点插在表尾*/
if(p==h)/*p不为空,则找到了指定结点*/
next=p;
/*如果p等于h,则新结点插入在第一个结点之前*/
/*新结点为新的头结点*/
/*不是头结点,则是中间某个位置,新结点的后继为p*/
/*新结点作为q的后继结点*/
\n----haveinserted%sstudent----\n"
name);
---Don'
tforgetsave---\n"
/*提示存盘*/
/*保存数据到文件*/
voidsave(STUDENT*h)
FILE*fp;
/*定义指向文件的指针*/
/*定义移动指针*/
charoutfile[10];
/*保存输出文件名*/
Enteroutfilename,forexamplec:
\\f1\\te.txt:
\n"
/*提示文件名格式信息*/
outfile);
if((fp=fopen(outfile,"
wb"
))==NULL)/*为输出打开一个二进制文件,如没有则建立*/
cannotopenfile\n"
exit
(1);
\nSavingfile......\n"
/*打开文件,提示正在保存*/
/*移动指针从头指针开始*/
=NULL)/*如p不为空*/
fwrite(p,sizeof(STUDENT),1,fp);
/*写入一条记录*/
/*指针后移*/
fclose(fp);
/*关闭文件*/
-----savesuccess!
!
-----\n"
/*显示保存成功*/
/*从文件读数据*/
STUDENT*load()
STUDENT*p,*q,*h=NULL;
/*定义记录指针变量*/
/*定义指向文件的指针*/
charinfile[10];
/*保存文件名*/
Enterinfilename,forexamplec:
infile);
/*输入文件名*/
if((fp=fopen(infile,"
rb"
))==NULL)/*打开一个二进制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 源程序 学生 成绩 管理