吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx

上传人:b****6 文档编号:17295164 上传时间:2022-12-01 格式:DOCX 页数:29 大小:242.49KB
下载 相关 举报
吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx_第1页
第1页 / 共29页
吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx_第2页
第2页 / 共29页
吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx_第3页
第3页 / 共29页
吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx_第4页
第4页 / 共29页
吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx

《吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

吉林大学c语言编程实验学生成绩管理系统Word文件下载.docx

search()查找结点

按照姓名查找结点,从头结点开始顺序查找,成功显示记录信息,失败,显示没找到。

姓名是字符串,比较功能利用字符串比较函数strcmp()实现。

save()保存记录到文件

将学生信息保存到指定文件中。

按照文件读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名,如果输入的是绝对路径,则文件保存到指定位置;

如果只给文件名,则文件保存在TurboC默认的路径下,

load()从文件中读取记录

按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的磁盘文件名,然后确定文件的大开放式。

如果文件打不开,则退出函数,否则选择一种度文件方式,从文件头开始,将记录读入内存,直到文件尾。

computer()计算各门课程的总分和课程平均分

头指针开始,每读一条记录,分别累加各科成绩,并统计记录条数,当所有数据处理完毕,求出平均分,最后输出结果为所有学生各门课程的总分和平均分。

insert()插入结点

插入结点需要输入插入位置和新结点信息。

输入某个结点的学号,新结点将插入在这个指定结点之前。

申请空间得到指针info,输入新结点信息,存放到新申请的空间info中。

设链表的头指针为h,p为指定结点的指针,q为p的前驱指针,从头结点开始循环移动指针p查找指定的结点,查找和插入时分一下几种情况处理:

1指针为空,如果p等于头h,说明链表为空,则新结点为头结点,修改指针h=info,否则,说明没有指定结点。

则新结点在表尾部,此时q所指的结点时最后一个结点,所以修改指针q->

next=info。

2指针p不为空,如果p=h,说明新结点插入在当前结点之前,为新的头结点,修改指针info=next=p,h=info。

否则,说明新结点的位置在p和q之间,修改指针为info->

next=p,q->

next=info

sort()分类统计

从头指针开始,分别对学生的各门功课成绩进行判别,并按照科目输出处于各个分数段的学生学号,姓名,成绩。

五.实验结果

菜单界面,如图一所示;

记录输入,如图

删除记录,如图所示,

显示记录,如图所示;

查询记录,如图所示;

计算各门功课的总分即平均分,如图所示;

六.体会

通过一周的计算机能力训练,在老师的耐心指导及自己的努力下,使自己对c语言有了新的认识,并初步领会了编程的思想。

,使对c语言的了解也开始有知识向应用过度。

虽然现在能力还挺有限,但自己还是感觉学了很多东西。

在程序编写过程中,首先应该从整体入手,掌握大体的框架,然后再具体到模块,并建立程序流程图。

再进入各模块的开发。

最后,把各模块联系起来并进行程序的调试。

通过具体的实践,我深刻的感觉到了自己知识的不足。

所以在编写程序时要学习很多新的知识,这时相关的网站及图书馆就成了最好的助手。

不能错过!

最后,感谢老师耐心,细致,热情的辅导及鼓励。

七.附录I——程序清单

/*ScoreManagementSystemofStudent*/

/*Welcometomysystem*/

#include"

stdio.h"

stdlib.h"

string.h"

conio.h"

mem.h"

ctype.h"

alloc.h"

{charno[9];

charname[15];

intscore[N];

charsex[2];

intage;

floatsum;

floataverage;

intorder;

structs1*next;

}STUDENT;

/*以下是函数原型*/

STUDENT*init();

STUDENT*create();

STUDENT*delete(STUDENT*h);

voidprint(STUDENT*h);

voidsearch(STUDENT*h);

voidsave(STUDENT*h);

STUDENT*load();

voidcomputer(STUDENT*h);

STUDENT*insert(STUDENT*h);

void*all_sum_ave(STUDENT*h);

voidgrade();

voidcopy();

STUDENT*sort(STUDENT*h);

intmenu_select();

intsubmenu();

voidgrade00(STUDENT*h);

voidgrade60(STUDENT*h);

voidgrade70(STUDENT*h);

voidgrade80(STUDENT*h);

voidgrade90(STUDENT*h);

/******主函数*******/

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:

head=sort(head);

/*排序*/

case10:

grade();

case11:

exit(0);

/*如菜单返回值为11程序结束*/

}}}

/******主菜单函数******/

menu_select()

char*menu[]={"

******************MENU************************"

/*定义菜单字符串数组*/

"

0.Initlist"

/*初始化*/

1.Enterlist"

/*输入记录*/

2.Deletearecordfromlist"

/*从表中删除记录*/

3.printlist"

/*显示单链表中所有记录*/

4.Searchrecordonname"

/*按照姓名查找记录*/

5.Savethefile"

/*将单链表中记录保存到文件中*/

6.Loadthefile"

/*从文件中读入记录*/

7.SumandAverage"

/*计算所有学生的总分和均分*/

8.Insertrecordtolist"

/*插入记录到表中*/

9.Sorttomakenewfile"

/*排序*/

10.Classificationthescore"

/**/

11.Quit"

****************20051118*********************"

};

chars[3];

/*以字符形式保存选择号*/

intc,i;

/*定义整形变量*/

gotoxy(1,1);

/*移动光标*/

printf("

pressanykeytocontinue...\n"

);

/*压任一键进入主菜单*/

getch();

/*输入任一键*/

/*清屏幕*/

textcolor(WHITE);

/*设置文本显示颜色为白色*/

textbackground(BLUE);

/*设置背景颜色为蓝色*/

gotoxy(10,2);

putch(0xc9);

/*输出左上角边框┏*/

for(i=1;

i<

64;

i++)

putch(0xcd);

/*输出上边框水平线*/

putch(0xbb);

/*输出右上角边框┓*/

for(i=3;

20;

gotoxy(10,i);

putch(0xba);

/*输出左垂直线*/

gotoxy(74,i);

}/*输出右垂直线*/

gotoxy(10,20);

putch(0xc8);

/*输出左下角边框┗*/

/*输出下边框水平线*/

putch(0xbc);

/*输出右下角边框┛*/

window(11,3,73,19);

/*制作显示菜单的窗口,大小根据菜单条数设计*/

for(i=0;

14;

i++)/*输出主菜单数组*/

gotoxy(10,i+1);

cprintf("

%s"

menu[i]);

}

textbackground(13);

/*设置背景颜色为黑色*/

window(1,1,80,25);

/*恢复原窗口大小*/

gotoxy(10,21);

do{

\n\tEnteryourchoice(0~11)tocontinue..."

/*在菜单窗口外显示提示信息*/

scanf("

s);

/*输入选择项*/

c=atoi(s);

/*将输入的字符串转化为整形数*/

}while(c<

0||c>

12);

/*选择项不在0~12之间重输*/

returnc;

/*返回选择项,主程序根据该数调用相应的函数*/

}

/*初始化*/

STUDENT*init()

{returnNULL;

/*创建链表*/

STUDENT*create()

{inti;

ints;

STUDENT*h=NULL,*info;

/*STUDENT指向结构体的指针*/

info=(STUDENT*)malloc(sizeof(STUDENT));

/*申请空间*/

if(!

info)/*如果指针info为空*/

\noutofmemory"

/*输出内存溢出*/

returnNULL;

/*返回空指针*/

inputs("

EntertheNo.as20051118.[Type#toEndEnter]:

"

info->

no,9);

/*输入学号并校验*/

if(info->

no[0]=='

#'

)break;

/*如果学号首字符为#则结束输入*/

Entername:

name,15);

/*输入姓名,并进行校验*/

EnterthesexM(ale)orF(emale):

sex,2);

Entertheageofthestudent:

%d"

&

info->

age);

age>

30||info->

age<

0)

\x07AGEERROR!

!

TYPEAGAIN!

\n"

}while(info->

0||info->

30);

pleaseinputstudentsscores:

/*提示开始输入成绩*/

s=0;

/*计算每个学生的总分,初值为0*/

N;

i++)/*N门课程循环N次*/

switch(i)

{case0:

printf("

pleaseinputENGLISHscores:

pleaseinputMATHscores:

pleaseinputClanguagescores:

pleaseinputmazhescores:

score[i]);

/*输入成绩*/

score[i]>

100||info->

score[i]<

0)/*确保成绩在0~100之间*/

DATAERROR!

/*出错提示信息*/

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|sex|age|eg|MATH|CLANG|MA|sum|ave|order|\n"

|---|--------|------------|---|---|----|----|------|----|------|-----|-----|\n"

while(p!

=NULL)

i++;

|%-3d|%-8s|%-12s|%1s|%3d|%4d|%4d|%6d|%4d|%4.2f|%5.2f|%3d|\n"

i,p->

no,p->

name,p->

sex,p->

age,p->

score[0],p->

score[1],

p->

score[2],p->

score[3],p->

sum,p->

average,p->

order);

p=p->

next;

************************************end*****************************************\n"

/*****删除记录*****/

STUDENT*delete(STUDENT*h)

{STUDENT*p,*q;

/*p为查找到要删除的结点指针,q为其前驱指针*/

chars[9];

/*存放学号*/

system("

cls"

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不为空,显示找到的记录信息*/

{printf("

\n\n\n***********************************STUDENT**************************************\n"

|No|name|sex|age|sc1|sc2|sc3|sc4|sum|ave|order|\n"

|----------|---------------|---|---|---|---|---|---|--------|-------|-----|\n"

|%-10s|%-15s|%1s|%3d|%3d|%3d|%3d|%3d|%4.2f|%4.2f|%3d|\n"

p->

/*压任一键后,开始删除*/

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];

/*存放姓名的字符数组*/

Pleaseenternameforsearching\n"

/*输入姓名*/

/*将头指针赋给p*/

name,s)&

=NULL)/*当记录的姓名不是要找的,且指针不为空时*/

/*移动指针,指向下一结点*/

if(p==NULL)/*如果指针为空*/

\n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1