o山抚「
ModifystiKlontrrcordor:
STUDENT
nunbor!
n帀啊o
1-1-il
iConp!
Math;Eng1
1A1.1
sum
jnicjI
p1
08196197jhong
!
—i---i
11
971
f——1
i“i
981r—i
1
991——1
2%
1
!
i
98.00
111
11
11
ii
11
Inputtheexisting^indentnunber:
H819619/
Wumter:
081%丄97.
Ndmt:
;hung,inputnewridme:
xin
C1占牌score:
99jCIdti射u刚亡Scuire[0-1001!
98
Mathscore^8,MathSecret!
1«U1:
99
Englishscore:
97EnglishScor&[01001:
96
>HodifysuLce^!
:
;*
STUDENT
ruinbcr
flrine
Comp!
Math;
sun
1J二
imci
1
Qei%137
11
xin
1_fH
ll
H一I
99;一1
98
1一1
293
11
11
97.QB
11
11
01
1i
pre^s^nvkevtoreturn
文件保存名为:
STUDENT路径为:
C:
\
修改、查询、排列等功能。
本系统可进行维护,
标志:
提交可行性分析报告
标志:
提交项目开发计划
标志:
完成需求分析报告
标志:
完成软件分析与设计文档标志:
代码编写全部完成
标志:
完成软件测试,可投入使用
6、项目管理
6、1人员管理
团队负责人:
陶修赟
小组成员:
万富,洪鑫,汪贤惠,项鑫
6、2产品管理
本产品工作于Win-TC工作环境,用于对学生成绩的管理。
学生用户,可进行查询课
程成绩;管理员可对学生及其成绩进行录入、修改。
6、3进程管理
可行性分析:
5月23日-5月24日项目开发计划:
5月25日-5月26日需求分析:
5月27日-5月27日
软件设计:
5月30日-6月1日
编程实现:
6月2日-6月10日软件测试:
6月13日-6月14日
6、4项目计划甘特图
:
0l:
r5=!
2=洌:
卑駆弓
纭1]程月田;3lL^]2£
h-|2iimitih
0^332f.-
1
zne
:
011=5^130
ai常阳日
V
Elite
测駁吐日j
me
2ILl£5j;zrE
auMziQ2
3I1EE
HL康胭冃
v-ri甲远l盼E3
aftHSlBi
$
斛#ii
ilit13
2I1BE
LJL144fl]3H
JUL'WrlJUqi
3U1科月诟5
w:
;
5厨曲甕
an筲朋冃(
7、编码
#include#inelude
#include"string.h"#inelude"conio.h"
|sum|ave|mici|\n"
#defineHEADER3"|11——|——1——|11——|"
#defineFORMAT"|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f
|%4d|\n"
#defineDATA
p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.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;
voidmenuchoice。
{
system("cls");/*清屏与clrscr()功能相同*/
textcolor(IO);/*在文本模式中选择新的字符颜色*/
gotoxy(7,5);
cprintf(”TheStudents'GradeManagementSystem\n");
gotoxy(7,8);
printf("\nPleaseEnteryourchoice;0enterstudents'system\n\t\t\t");
printf(”");
printf("1enterteachers'system\n");
voidmenu()/*菜单函数*/{
system("cls");/*清屏与clrscr()功能相同*/textcolor(10);/*在文本模式中选择新的字符颜色*/
gotoxy(7,5);/*在文本窗口中设置光标,下同*/
cprintf(”TheStudents'GradeManagementSystem\n");
gotoxy(7,8);
cprintf(”
*1
input
record
2
delete
*\n");
gotoxy(7,10);cprintf(”
*3
search
record
4
modify
*\n");
gotoxy(7,11);
cprintf(”
*5
insert
record
6
count
*\n");
gotoxy(7,12);
cprintf(”
*7
sort
reord
8
save
*\n");
gotoxy(7,佝;cprintf(”
*9
display
record
0
quit
*************************
******************************
gotoxy(7,9);
*\n");
record
record
record
record
system
/*cprintf()送格式化输出至文本窗口屏幕中*/
}voidmenustudent()
{
system("cls");/*清屏与clrscr()功能相同*/
textcolor(IO);/*在文本模式中选择新的字符颜色*/
gotoxy(7,5);/*在文本窗口中设置光标,下同*/
cprintf(”
TheStudents'GradeManagementSystem\n”);
gotoxy(7,8);
gotoxy(7,9);
system*\n");
gotoxy(7,10);cprintf(”
*************************************************************\n")・
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
voidprintheader()/*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
voidprintdata(Node*pp)/*格式化输出表中数据*/
{
Node*p;
p=pp;
printf(FORMAT,DATA);
}
voidWrong()/*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:
inputhaswrong!
pressanykeyto
continue**********\n");
getchar();
}
voidNofind()/*输出未查找此学生的信息*/
{
printf("\n=====>Notfindthisstudent!
\n");
}
voidDisp(Linkl)/*显示单链表I中存储的学生记录,内容为student结构中定义的数据项
*/
{
Node*p;
p=l->next;/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域
指向的后继结点才有学生信息*/
if(!
p)
{
printf("\n=====>Notstudentrecord!
'n");
getchar();
return;
}
printf("\n\n");
printheader();/*输出表格头部*/
while(p)/*逐条输出链表中存储的学生信息*/
{
printdata(p);
p=p->next;/*移动至下一个结点*/
printf(HEADER3);
}
getchar();
}
Node*Locate(Linkl,charfindmess[],charnameornum[])/*用于定位链表中符合
要求的节点,并返回指向该节点的指针,findmess[]保存要查找的具体内容;nameornum[]保存按什么查找;在单链表I中查找;*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0)/*若找至Ufindmess值的学号*/
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.name,findmess)==0)/*若找至Ufindmess值的学生
姓名*/
returnr;r=r->next;
}
}
return0;
}
voidstringinput(char*t,intlens,char*notice)/*输入字符串,并进行长度验证(长度
{
charn[255];
do{
printf(notice);/*显示提示信息*/
scanf("%s",n);/*输入字符串*/
if(strlen(n)>lens)printf("\nExceedtherequiredlength!
\n");/*进行长度校
验,超过lens值重新输入*/
}while(strlen(n)>lens);
strcpy(t,n);/*将输入的字符串拷贝到字符串t中*/
}
intnumberinput(char*notice)/*输入分数,0<=分数<=100)*/
{
intt=0;
do{
printf(notice);/*显示提示信息*/
scanf("%d",&t);/*输入分数*/
if(t>100||t<0)printf("\nScoremustin[0,100]!
\n");/*进行分数校验*/
}while(t>100||t<0);
returnt;
}
voidAdd(Linkl)/*增加学生记录*/
{
Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->next;
system("cls");
Disp(l);/*先打印出已有的学生信息*/
while(r->next!
=NULL)
r=r->next;/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/
{
while
(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录
操作*/
格式化输入
stringinput(num,10,"lnputnumber(press'O'returnmenu):
");/*
学号并检验*/
flag=0;
if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/
{return;}
s=l->next;
while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的
学号*/
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)/*提示用户是否重新输入*/
{
getchar();
printf("=====>Thenumber%sisnotexisting,tryagain?
(y/n):
",num);scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}p=(Node*)malloc(sizeof(Node));
if(!
p)
{
printf("\nAllocatememoryfailure");/*如没有申请到,打印提示信息*/
return;
}
strcpy(p->data.num,num);/*将字符串num拷贝至Up->data.num中*/
stringinput(p->data.name,15,"Name:
");
p->data.cgrade=numberinput("ClanguageScore[0-100]:
");/*输入并检验
分数,分数必须在0—100之间*/
p->data.mgrade=numberinput("MathScore[0-100]:
");
p->data.egrade=numberinput("EnglishScore[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->next=p;/*将新建的结点加入链表尾部中*/
r=p;
saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/
}
return;
}
voidQur(Linkl)/*按学号或姓名,查询学生记录*/
{
intselect;/*1:
按学号查,2:
按姓名查,其他:
返回主界面(菜单)*/
charsearchinput[20];/*保存用户输入的查询内容*/
Node*p;
if(!
l->next)/*若链表为空*/
{
system("cls");
printf("\n=====>Nostudentrecord!
\n");
getchar();
return;
}
system("cls");
printf("\n=====>1Searchbynumber=====>2Searchbyname\n");
printf("pleasechoice[1,2]:
");
scanf("%d",&select);
if(select==1)/*按学号查询*/
{
stringinput(searchinput,1O,"lnputtheexistingstudentnumber:
");
p=Locate(l,searchinput,"num");/*在I中查找学号为searchinput值的节点,并
返回节点的指针*/
if(p)/*若p!
=NULL*/
{
printheader();
printdata(p);
printf(END);
printf("pressanykeytoreturn");
getchar();
}
else
No