C语言程序设计源程序学生成绩管理Word格式文档下载.docx

上传人:b****6 文档编号:19839751 上传时间:2023-01-10 格式:DOCX 页数:21 大小:21.51KB
下载 相关 举报
C语言程序设计源程序学生成绩管理Word格式文档下载.docx_第1页
第1页 / 共21页
C语言程序设计源程序学生成绩管理Word格式文档下载.docx_第2页
第2页 / 共21页
C语言程序设计源程序学生成绩管理Word格式文档下载.docx_第3页
第3页 / 共21页
C语言程序设计源程序学生成绩管理Word格式文档下载.docx_第4页
第4页 / 共21页
C语言程序设计源程序学生成绩管理Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言程序设计源程序学生成绩管理Word格式文档下载.docx

《C语言程序设计源程序学生成绩管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计源程序学生成绩管理Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

C语言程序设计源程序学生成绩管理Word格式文档下载.docx

/*插入记录*/

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)/*打开一个二进制

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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