个人成绩系统函数流程图.docx
- 文档编号:30572344
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:17
- 大小:440.91KB
个人成绩系统函数流程图.docx
《个人成绩系统函数流程图.docx》由会员分享,可在线阅读,更多相关《个人成绩系统函数流程图.docx(17页珍藏版)》请在冰豆网上搜索。
个人成绩系统函数流程图
程序代码
#include
#include
#defineNULL0
#defineLENsizeof(structstudent)
#include
#include
#include
structstudent
{longjsh;
floatxuefen;
charname[30];
intzongfen;
structstudent*next;
};
intn;/*n为全局变量,用于统计结点的个数*/
/*―――――————――————-―――creat函数――――――————――――――――*/
structstudent*creat()/*创建creat函数用于建立链表*/
{
structstudent*head;
structstudent*p1,*p2;
n=0;
p2=(structstudent*)malloc(LEN);/*开辟一个大小为LEN的内存单元*/
p1=p2;
printf("请输入教师号:
");scanf("%ld",&p1->jsh);/*输入jsh-教师号*/
if(p1->jsh!
=0)
{printf("请输入课程名:
");scanf("%s",p1->name);/*输入课程名*/
printf("请输入学分:
");scanf("%f",&p1->xuefen);/*输入学分*/
printf("请输入总分:
");scanf("%d",&p1->zongfen);/*输入总分*/
printf("ok!
请输入下一个结点的信息(以教师号为0结束)\n");/*提示已经输好了一位同学的信息*/
}
head=NULL;
while(p1->jsh!
=0)/*如果输入的教师号不是0,则继续输入其他课程的信息*/
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
printf("请输入教师号:
");
scanf("%ld",&p1->jsh);
if(p1->jsh!
=0)
{
printf("请输入课程名:
");scanf("%s",p1->name);
printf("请输入学分:
");scanf("%f",&p1->xuefen);
printf("请输入总分:
");scanf("%d",&p1->zongfen);
printf("ok!
请输入下一个结点的信息(以教师号为0结束)\n");
}
}
p2->next=NULL;
returnhead;/*结束creat函数*/
}
/*―――――――---――――-―――print函数――――――----――――――――*/
voidprint(structstudent*head)/*开始打印函数*/
{
structstudent*p;
printf("\nNow,These%drecordsare:
\n",n);
p=head;
if(head!
=NULL)/*如果链表不是空,则打印每个结点信息*/
{
printf("---------|----------------|--------|-------\n");
printf("教师号|课程名|学分|总分\n");
do
{
printf("---------|----------------|--------|-------\n");
printf("%-9ld|%-16s|%-8.0f|%-8d\n",p->jsh,p->name,p->xuefen,p->zongfen);
p=p->next;
}
while(p!
=NULL);
printf("---------|----------------|--------|-------\n");
}
elseprintf("链表是空的!
\n");/*如果链表是空表,刚提示这个链表是空表*/
}/*结束print函数*/
/*―――――――---――――---―――del函数――――――-----――――――――*/
structstudent*del(structstudent*head,longjsh)/*开始创建del函数,用于删除结束*/
{
structstudent*p1,*p2;
if(head==NULL)
{
printf("\n链表是空的!
\n");
returnhead;
}/*用于检查链表是否为空,如果为空,刚提示这个链表为空表*/
p1=head;
while(jsh!
=p1->jsh&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(jsh==p1->jsh)/*找到对应的结点*/
{
if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("删除:
%ld\n",jsh);
n=n-1;
}
elseprintf("0%ld没有找到!
\n",jsh);/*没有打到对应的结点,则提示没有找到*/
returnhead;
}
/*―――――――---――――-―――insert函数――――――----――――――――*/
structstudent*insert(structstudent*head,structstudent*lnew)/*创建insert函数,用于插入结点,返回值为一个指针*/
{
structstudent*p0,*p1,*p2;
p1=head;
p0=lnew;
if(head==NULL)
{
head=p0;
p0->next=NULL;
}/*结果链表为空表,刚把插入的结点指针给头指针,结点的next为空*/
else
{
while((p0->jsh>p1->jsh)&&(p1->next!
=NULL))/*寻找该插入的位置*/
{
p2=p1;
p1=p1->next;
}
if(p0->jsh<=p1->jsh)/*找到了该插入的位置*/
{
if(head==p1)
head=p0;/*放在最前面*/
else
p2->next=p0;/*结点插到p1,p2之间*/
p0->next=p1;
}
else{
p1->next=p0;
p0->next=NULL;
}/*结点插到最后*/
}
n=n+1;
returnhead;/*结点数加*/
}/*结束insert函数的建立*/
/*―――――――---――――-―――menubar函数――――――----――――――――*/
intmenubar()/*创建菜单函数*/
{
intflag=1;/*用来做记号*/
intc;
printf("\n\n**************王芬的成绩表***************\n");
printf("----学号:
109074337\n");/*用来存储使用者选择的菜单代号*/
printf("\n**************链表综合处理***************\n");
printf("1:
创建链表----\n");
printf("2:
输出链表\n");
printf("3:
插入结点菜单\n");
printf("4:
删除结点\n");
printf("0:
退出----\n");
printf("*************************************************");
printf("\n请根据你想执行的命令,输入您的选择:
(0~4):
");
scanf("%d",&c);/*接收使用都所输入的代号*/
while(flag)/*flag用来标记,如果为链表为空,或者使用者第一次输入的不是0或者不是4,则需要重新输入*/
{
if(n==0&&c!
=1&&c!
=0)
{
printf("在建立链表之前请先输入建立链表\n");
printf("\n请输入您的选择:
(0~4):
");
scanf("%d",&c);
flag=1;
}
elseflag=0;
}
while(c<0||c>4)/*表示链表已经创建,但输入的不能大于4,或者小于0*/
{
printf("\n请输入您的选择:
(0~4):
");
scanf("%d",&c);
}
returnc;/*返回c的值*/
}
/*―――――――---――――-―――main函数――――――----――――――――*/
main()/*开始主函数*/
{structstudent*head,*lnew;
longdel_jsh;
for(;;)/*开始for循环*/
{
switch(menubar())
{
case1:
printf("请输入创建的链表的结点的信息:
\n");
head=creat();
break;
case2:
print(head);
break;
case3:
printf("\n请输入要插入的结点的信息(以教师号为0结束):
\n");
lnew=(structstudent*)malloc(LEN);
printf("请输入教师号:
");scanf("%ld",&lnew->jsh);
if(lnew->jsh!
=0)
{
printf("请输入课程名:
");scanf("%s",lnew->name);
printf("请输入学分:
");scanf("%f",&lnew->xuefen);
printf("请输入总分:
");scanf("%d",&lnew->zongfen);
}
while(lnew->jsh!
=0)
{
head=insert(head,lnew);
print(head);
printf("请输入下一个要插入的结点的信息(以教师号为0结束):
\n");
lnew=(structstudent*)malloc(LEN);
printf("请输入教师号:
");
scanf("%ld",&lnew->jsh);
if(lnew->jsh!
=0)
{
printf("请输入课程名:
");scanf("%s",lnew->name);
printf("请输入学分");scanf("%f",&lnew->xuefen);
printf("请输入总分:
");scanf("%d",&lnew->zongfen);
printf("ok!
请输入下一个要插入的结点的信息(如果xiNg退出,输入教师号为0,就结束)\n");
}
}
break;
case4:
printf("\n请输入你想删除的结点的教师号:
");
scanf("%ld",&del_jsh);
while(del_jsh!
=0)
{
head=del(head,del_jsh);
print(head);
printf("\n请输入你想删除的结点的教师号:
");
scanf("%ld",&del_jsh);
}
break;
case0:
system("CLS");
printf("\n\t\t谢谢您的使用\n\n\n\n");
getch();
exit(0);/*退出for循环*/
}
}
}
测试的具体步骤
步骤一、创建链表
步骤二、输出链表
步骤三、插入节点
步骤四、删除节点
步骤五、退出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 成绩 系统 函数 流程图