C语言程序管理系统课程设计报告Word文件下载.docx

上传人:b****6 文档编号:20607091 上传时间:2023-01-24 格式:DOCX 页数:31 大小:55.22KB
下载 相关 举报
C语言程序管理系统课程设计报告Word文件下载.docx_第1页
第1页 / 共31页
C语言程序管理系统课程设计报告Word文件下载.docx_第2页
第2页 / 共31页
C语言程序管理系统课程设计报告Word文件下载.docx_第3页
第3页 / 共31页
C语言程序管理系统课程设计报告Word文件下载.docx_第4页
第4页 / 共31页
C语言程序管理系统课程设计报告Word文件下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

C语言程序管理系统课程设计报告Word文件下载.docx

《C语言程序管理系统课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序管理系统课程设计报告Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。

C语言程序管理系统课程设计报告Word文件下载.docx

intselect;

/*保存选择结果变量*/

charch;

/*保存(y,Y,n,N)*/

intcount=0;

/*保存文件中的记录条数(或结点个数)*/

Node*p,*r;

/*定义记录指针变量*/

l=(Node*)malloc(sizeof(Node));

if(!

l)

printf(”\n内存分配失败”);

/*如没有申请到,打印提示信息*/

return;

/*返回主界面*/

l—〉next=NULL;

r=l;

fp=fopen(”C:

\\student”,"

ab+"

);

/*以追加方式打开一个二进制文件,可读可写,若此文件不存在,会创建此文件*/

if(fp==NULL)

printf(”\n=====〉无法打开文件!

\n"

exit(0);

while(!

feof(fp))

{

p=(Node*)malloc(sizeof(Node));

p)

printf(”memorymallocfailure!

\n”);

/*没有申请成功*/

/*退出*/

if(fread(p,sizeof(Node),1,fp)==1)/*一次从文件中读取一条学生成绩记录*/

p—>

next=NULL;

r—>

next=p;

r=p;

/*r指针向后移一个位置*/

count++;

}

fclose(fp);

/*关闭文件*/

printf("

\n=====〉打开文件成功,共记录的数目:

%d。

\n”,count);

menu();

while

(1)

system("

cls”);

menu();

p=r;

printf(”\n请输入您的选择(0~9):

”);

/*显示提示信息*/

scanf(”%d”,&select);

if(select==0)

if(saveflag==1)/*若对链表的数据有修改且未进行存盘操作,则此标志为1*/

{getchar();

printf(”\n=====〉是否保存修改记录文件?

(y/n):

scanf(”%c”,&ch);

if(ch=='

y'

||ch=='

Y’)

Save(l);

printf(”=====〉谢谢使用!

"

getchar();

break;

switch(select)

case1:

Add(l);

break;

/*增加学生记录*/

case2:

Del(l);

/*删除学生记录*/

case3:

Qur(l);

break;

/*查询学生记录*/

case4:

Modify(l);

/*修改学生记录*/

case5:

Insert(l);

/*插入学生记录*/

case6:

Tongji(l);

/*统计学生记录*/

case7:

Sort(l);

/*排序学生记录*/

case8:

Save(l);

/*保存学生记录*/

case9:

{system(”cls”);

Disp(l);

printf(”按任何键返回”);

chara;

scanf(”%d”,&a);

}/*显示学生记录*/

default:

Wrong();

getchar();

/*按键有误,必须为数值0—9*/

}程序中建立了多个函数分别来完成每个所要求的功能:

读文件和写文件函数,建链表函数,插入、修改和删除函数,排序、统计和输出

函数。

程序利用各个函数来完成前面要求所需要的功能。

二:

程序调用图:

三:

功能菜单

#***************************菜单**************************;

*1输入成绩*2删除成绩

*3查询成绩*4修改成绩

*5插入成绩*6统计成绩

”*7成绩排序*8保存成绩

*9显示成绩*0退出系统

#*********************************************************

四.实验结果;

(见程序运行)

五:

体会:

做完这个c语言程序设计的作业,我学会了很多新知识,对c语言有了更进一步的了解。

开始时,我想用结构数组来做这个程序,但后来我发现用做它,修改数据和读取数据都显得很方便.于是,相比较之下,我便选择了链表。

编程时会遇到一些困难,最令人头疼的莫过于程序运行时出错了.有时哪怕是一些很小的错误经常能导致难以预料到的后果,因此,编程时我尽量做到一丝不苟,不敢有丝毫疏忽。

通过这次c语言编程的练习,我的编程水平有了进一步的提高,同时也使我对编程有了一个更清醒的了解和认识。

六,程序。

//密码123

#include"

stdio.h”/*标准输入输出函数库*/

stdlib。

h”/*标准函数库*/

#include”string。

h"

/*字符串函数库*/

#include"

conio.h"

/*屏幕操作函数库*/

#defineHEADER1”--———-——————————-———-——-——--—-———学生成绩--———————-----—-—-—-——-——----—---—\n"

#defineHEADER2"

|学号|姓名|C语言|数学|英语|总分|平均分|名次|\n”

#defineHEADER3"

|—--——----——————|—--——-—--———-——|—-———|-———|--—--|-———————|————-—--|---——|"

#defineFORMAT”|%—10s|%—15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n”

#defineDATAp—〉data。

num,p—〉data.name,p->

data。

egrade,p—〉data。

mgrade,p—>

cgrade,p-〉data。

total,p—〉data。

ave,p—〉data.mingci

#defineEND”——-—————-—-—————-—--——--——-——-———--—-———-——-—--——————-————-——---—————\n”

intsaveflag=0;

/*是否需要存盘的标志变量*/

/*定义与学生有关的数据结构*/

typedefstructstudent/*标记为student*/

charnum[10];

/*学号*/

charname[15];

/*姓名*/

intcgrade;

/*C语言成绩*/

intmgrade;

/*数学成绩*/

integrade;

/*英语成绩*/

inttotal;

/*总分*/

floatave;

/*平均分*/

intmingci;

/*名次*/

};

/*定义每条记录或结点的数据结构,标记为:

node*/

typedefstructnode

structstudentdata;

/*数据域*/

structnode*next;

/*指针域*/

}Node,*Link;

/*Node为node类型的结构变量,*Link为node类型的指针变量*/

voidmenu()/*主菜单*/

system("

cls”);

/*调用DOS命令,清屏。

与clrscr()功能相同*/

cprintf("

学生成绩管理系统\n"

#***************************菜单**************************#\n”);

*1输入成绩*2删除成绩*\n”);

*3查询成绩*4修改成绩*\n”);

*5插入成绩*6统计成绩*\n”);

*7成绩排序*8保存成绩*\n”);

cprintf(”*9显示成绩*0退出系统*\n"

cprintf(”#*********************************************************#\n”);

/*cprintf()送格式化输出至文本窗口屏幕中*/

voidprintheader()/*格式化输出表头*/

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);

voidprintdata(Node*pp)/*格式化输出表中数据*/

Node*p;

p=pp;

printf(FORMAT,DATA);

voidWrong()/*输出按键错误信息*/

\n\n\n\n\n***********输入有错!

按任意键继续!

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

getchar();

voidNofind()/*输出未查找此学生的信息*/

printf(”\n=====〉没有找到这名学生!

\n”);

voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/

Node*p;

p=l—〉next;

/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/

p)/*p==NULL,NUll在stdlib中定义为0*/

printf(”\n=====〉没有学生记录!

return;

\n\n”);

printheader();

/*输出表格头部*/

while(p)/*逐条输出链表中存储的学生信息*/

printdata(p);

p=p—〉next;

/*移动直下一个结点*/

printf(HEADER3);

/*************************************************************

作用:

用于定位链表中符合要求的节点,并返回指向该节点的指针

参数:

findmess[]保存要查找的具体内容;

nameornum[]保存按什么查找;

在单链表l中查找;

**************************************************************/

Node*Locate(Linkl,charfindmess[],charnameornum[])

Node*r;

if(strcmp(nameornum,"

num”)==0)/*按学号查询*/

r=l—〉next;

while(r)

if(strcmp(r—〉data。

num,findmess)==0)/*若找到findmess值的学号*/

returnr;

r=r—〉next;

elseif(strcmp(nameornum,”name”)==0)/*按姓名查询*/

r=l—>

next;

if(strcmp(r—>

data.name,findmess)==0)/*若找到findmess值的学生姓名*/

returnr;

r=r—>

return0;

/*若未找到,返回一个空指针*/

/*输入字符串,并进行长度验证(长度<

lens)*/

voidstringinput(char*t,intlens,char*notice)

charn[255];

do{

printf(notice);

scanf(”%s"

,n);

/*输入字符串*/

if(strlen(n)〉lens)printf(”\n超过所需长度!

\n"

/*进行长度校验,超过lens值重新输入*/

}while(strlen(n)〉lens);

strcpy(t,n);

/*将输入的字符串拷贝到字符串t中*/

/*输入分数,0<

=分数〈=100)*/

intnumberinput(char*notice)

intt=0;

do{

printf(notice);

/*显示提示信息*/

scanf("

%d”,&t);

/*输入分数*/

if(t〉100||t<

0)printf(”\n评分必须在[0100]!

\n”);

/*进行分数校验*/

}while(t〉100||t<

0);

returnt;

/*增加学生记录*/

voidAdd(Linkl)

Node*p,*r,*s;

/*实现添加操作的临时的结构体指针变量*/

charch,flag=0,num[10];

s=l—〉next;

system(”cls”);

/*先打印出已有的学生信息*/

while(r—>

next!

=NULL)

r=r-〉next;

/*将指针移至于链表最末尾,准备添加记录*/

while

(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/

while

(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/

stringinput(num,10,"

输入号码(按'

0’返回菜单):

/*格式化输入学号并检验*/

flag=0;

if(strcmp(num,”0”)==0)/*输入为0,则退出添加操作,返回主界面*/

{return;

while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/

{

if(strcmp(s—〉data。

num,num)==0)

flag=1;

break;

s=s-〉next;

}

if(flag==1)/*提示用户是否重新输入*/

printf("

=====〉人数%s是不存在的,再试一次?

(y/n):

”,num);

scanf(”%c”,&ch);

y’||ch=='

continue;

return;

{break;

p=(Node*)malloc(sizeof(Node));

/*申请内存空间*/

/*返回主界面*/

strcpy(p—〉data。

num,num);

/*将字符串num拷贝到p-〉data.num中*/

stringinput(p—〉data。

name,15,"

Name:

p—〉data.cgrade=numberinput(”C语言[0-100]:

/*输入并检验分数,分数必须在0-100之间*/

p->

data.mgrade=numberinput(”数学Score[0-100]:

/*输入并检验分数,分数必须在0-100之间*/

p—>

egrade=numberinput(”英语Score[0—100]:

p—〉data.total=p—〉data。

egrade+p—〉data.cgrade+p-〉data.mgrade;

/*计算总分*/

p—〉data.ave=(float)(p-〉data。

total/3);

/*计算平均分*/

p-〉data。

mingci=0;

p—〉next=NULL;

/*表明这是链表的尾部结点*/

r—>

/*将新建的结点加入链表尾部中*/

r=p;

saveflag=1;

voidQur(Linkl)/*按学号或姓名,查询学生记录*/

/*1:

按学号查,2:

按姓名查,其他:

返回主界面(菜单)*/

charsearchinput[20];

/*保存用户输入的查询内容*/

Node*p;

l-〉next)/*若链表为空*/

system(”cls"

printf(”\n=====>

没有学生记录!

system(”cls”);

printf(”\n=====〉1按学号搜寻=====〉2按名称搜索\n"

printf(”pleasechoice[1,2]:

scanf("

%d”,&select);

if(select==1)/*按学号查询*/

stringinput(searchinput,10,"

输入现有的学生学号:

p=Locate(l,searchinput,”num"

/*在l中查找学号为searchinput值的节点,并返回节点的指针*/

if(p)/*若p!

=NULL*/

printheader();

printdata(p);

printf(END);

printf(”按任意键返回”);

else

Nofind();

elseif(select==2)/*按姓名查询*/

stringinput(searchinput,15,”输入现有的学生姓名:

p=Locate(l,searchinput,”name"

if(p)

printf(END);

printf(”按任意键返回"

Nofind();

getchar();

Wrong();

/*删除学生记录:

先找到保存该学生记录的节点,然后删除该节点*/

voidDel(Linkl)

intsel;

Node*p,*r;

charfindmess[20];

l-〉next)

{system(”cls”);

没有该学生的记录\n"

return;

Disp(l);

printf(”\n=====>

1按学号删除=====〉2按姓名删除\n"

请选择[1,2]:

scanf(”%d"

,&sel);

if(sel==1)

stringinput(findmess,10,”输入现有的学生学号:

”);

p=Locate(l,findmess,"

num”);

if(p)/*p!

=NULL*/

r=l;

while(r—〉next!

=p)

next;

next=p-〉next;

/*将p所指节点从链表中去除*/

free(p);

/*释放内存空间*/

printf(”\n=====〉删除成功!

saveflag=1;

elseif(sel==2)/*先按姓名查询到该记录所在的节点*/

stringinput(findmess,15,"

输入现有的学生姓名:

p=Locate(l,findmess,”name"

r=r—〉next;

r—〉next=p-〉next;

/*修改学生记录。

先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/

voidModify(Linkl)

charfindmess[20];

l->

next)

{system("

\n=====>

没有该学生记录!

printf(”修改学生记录”);

stringinput(findmess,10,"

inputtheexistingstudentnumber:

/*输入并检验该学号*/

p=Locate(l,findmess,"

num”);

/*查询到该节点*/

if(p)/*若p!

=NULL,表明已经找到该节点*/

Number:

%s,\n”,p—〉data.num);

printf(”Name:

%s,"

,p-〉data.name);

name,15,"

输入新姓名:

printf(”C语言分数:

%d,”,p-〉data。

cgrade);

data.cgrade=numberinput(”

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

当前位置:首页 > 自然科学 > 物理

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

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