
1、首先写明程序名称和程序所属的系统、子系统或模块的名称。
2、其次写明编写程序所需使用的语言,输入的方式和格式,输出的方式与格式。
3、接着写明程序处理过程说明。
4、最后写明程序运行环境说明。
详细设计说明书又可称程序设计说明书。编制目的是说明一个软件系统各个层次中的每一个程序 (每个模块或子程序)的设计考虑,如果一个软件系统比较简单,层次很少,本文件可以不单独编写,有关 内容合并入概要设计说明书。开发人员:黄涛 学号:2004551425 计算机3班开发日期:2006年2月22日
版本:————
程序功能:建立一个简单的学生管理系统,存储的学生信息至少包括:班级,学号,姓名,各个科目的成绩.能够完成的功能至少有:输入,查询,修改,删除学生信息,计算学生的平均成绩,名次,按某个科目的成绩排序输出.注意:只能采用文件形式管理,不得采用现成的数据库管理.
开发环境:程序在Visual c++ 6.0下开发,编译工具为Vc 6.0, *** 作系统为Windows XP.
数据结构和算法:本程序包含数个函数,且用链表存储信息,每个节点包含一个学生的信息.
本程序中有两种结构体:
typedef struct student{ typedef struct score{
char name[MAX+1]/*学生姓名*/ char name[MAX+1]/*学生姓名*/
int num/*学生学号*/ int aver/*学生成绩*/
char class[MAX+1]/*班级*/ struct score *next/*指向后继节点*/
int Chinese/*语文成绩*/ }Sco,*SCO
int English/*英语成绩*/
int math/*数学成绩*/
int computer/*计算机成绩*/
struct student *next/*指向后继节点*/
}Stu,*STU
程序流程图如下:
*****主程序流程图 *****
主要函数功能说明
函数原型:STU insert( )功能:插入学生信息
入口参数:无 出口参数:无 返回值:无
函数原型:STU xiugai( )功能:修改学生信息
入口参数:无 出口参数:无 返回值:无
函数原型:STU shanchu( )功能:删除学生信息
入口参数:无 出口参数:无 返回值:无
函数原型:STU find( )功能:查找学生信息
入口参数:无 出口参数:无 返回值:无
函数原型:int xianshi( )功能:显示文件内容
入口参数:无 出口参数:无 返回值:无
函数原型:int eaverage( )功能:计算学生名次
入口参数:无 出口参数:无 返回值:无
函数原型:int chinese( )功能:语文成绩
入口参数:无 出口参数:无 返回值:无
函数原型:int english( )功能:英语成绩
入口参数:无 出口参数:无 返回值:无
函数原型:int math( )功能:数学成绩
入口参数:无 出口参数:无 返回值:无
函数原型:int computer( )功能:计算机成绩
入口参数:无 出口参数:无 返回值:无
函数原型:void fresh( )功能: 清屏
入口参数:无 出口参数:无 返回值:无
—————————— 说明书结束 ——————————————————
—————— 源程序 ————————
#include
#include
#include
#include
#include
#define LEN sizeof(struct student)
#define NEM sizeof(struct score)
#define MAX 8
typedef struct student{ /*学生信息节点*/
int num
char class[MAX+1]
char name[MAX+1]
int chinese
int english
int math
int computer
struct student *next
}Stu,*STU
typedef struct score{
char name[MAX+1]
float aver
struct score *next
}Sco,*SCO
struct score stud[1000]
FILE *fp
void print( ) /*清屏*/
{ system("cls")
printf("\t\t\t--学生成绩管理系统--\n")
printf("creat(建立文件模型)\t")
printf("insert(插入学生信息)\t")
printf("xiugai(修改学生信息)\t\n")
printf("find(查找学生信息)\t")
printf("fresh(清屏)\t")
printf("shanchu(删除学生信息)\t\n")
printf("xianshi(显示文件内容)\t")
printf("eaverage(计算学生平均成绩和名次)\t\n")
printf("chinese(语文课程排序)\t")
printf("english(英语课程排序)\t")
printf("math(数学课程排序)\t")
printf("computer(计算机课程排序)\t")
printf("quit(退出)\t\n")
}
void cin(STU p1)
{printf("请输入姓名:")
scanf("%s",p1->name)
printf("学号:")
scanf("%d",&p1->num)
printf("班级:")
scanf("%s",p1->class)
printf("请输入成绩:\n")
printf("语文:")
scanf("%d",&p1->chinese)
printf("英语:")
scanf("%d",&p1->english)
printf("数学:")
scanf("%d",&p1->math)
printf("计算机:")
scanf("%d",&p1->computer)
}
STU creat(void) /*创建函数模型*/
{ STU head,p1,p2
char ch
int i=1,k=0
p1=p2=(STU)malloc(LEN)
while(i)
{
k++
if(k==1)
head=p1
else
{p2->next=p1
p2=p1}
printf("Do you Want to Continue yes or no")
ch=getchar()
ch=getchar()
if(ch=='n'||ch=='N')
{ i=0
p1->next=NULL}
else
{p1=(STU)malloc(LEN)
cin(p1)}
}
printf("信息输入完毕.")
Indat(head)
}
Indat(STU p){ /*把链表中的信息存入到文件*/
if((fp=fopen("stulist","wb"))==NULL)
{printf("can not open file!\n")
return
}
while(p!=NULL)
if(fwrite(p,LEN,1,fp)!=1)
{printf("file write error\n")
break}
else
p=p->next
printf("写入完毕!")
fclose(fp)
}
STU Outdat() /*把文件中的信息放入到链表*/
{ STU head,p1,p2,p4
while((fp=fopen("stulist","rb"))==NULL)
printf("cannot open infile!\n")
p4=p2=p1=head=(STU)malloc(LEN)
while(1)
{ if(fread(p1,LEN,1,fp)!=1)
{printf("读出完毕!")
p4->next=NULL
free(p1)
fclose(fp)
return(head)
}
p1=(STU)malloc(LEN)
p2->next=p1
p4=p2
p2=p1
}
}
find(){ /*查找学生的信息*/
char name[10]
int b=0
STU p3
p3=Outdat()
printf("请输入您要查询信息的用户名:\n")
scanf("%s",name)
while(p3)
if(strcmp(name,p3->name)!=0)
p3=p3->next
else
{ printf("这是您要查询的信息!\n")
printf("%s\t%d\t%s",p3->name,p3->num,p3->class)
printf("语文:")printf("%d\t",p3->chinese)
printf("英语:")printf("%d\t",p3->english)
printf("数学:")printf("%d\t",p3->math)
printf("计算机:")printf("%d\t",p3->computer)
b=1printf("信息输出完毕!\n")
break
}
if(b==0)
printf("对不起!没有与您要查的相关信息!")
}
STU insert() /*插入学生信息*/
{ STU p1,p2,p3,head
int i=1
char ch
p3=Outdat()
head=p3
p1=(STU)malloc(LEN)
printf("请输入要插入的学生信息!\n")
cin(p1)
while(i)
{ if(p3->next==NULL)
{ p1->next=NULL
p3->next=p1
}
else
{p1->next=p3->next
p3->next=p1}
printf("Do you Want to Continue yes or no")
ch=getchar()
ch=getchar()
if(ch=='n'||ch=='N')
i=0
else
{ p1=(STU)malloc(LEN)
printf("请输入要插入的学生信息!\n")
cin(p1)
}
Indat(p3)}
return(head)
}
STU xiugai() /*修改学生信息*/
{ char name[10]
STU head,p3
int b=0
p3=Outdat()
head=p3
printf("请输入您要修改信息的用户名:\n")
scanf("%s",name)
while(p3)
if(strcmp(name,p3->name)!=0)
p3=p3->next
else
{printf("这是您要修改的信息!\n")
printf("%s\t%d\t%s",p3->name,p3->num,p3->class)
printf("语文:")
printf("%d\t",p3->chinese)
printf("英语:")
printf("%d\t",p3->english)
printf("数学:")
printf("%d\t",p3->math)
printf("计算机:")
printf("%d\t",p3->computer)
b=1
printf("信息输出完毕!\n")
printf("请输入您的新信息!\n")
cin(p3)
Indat(head)
return
}
if(b==0)
printf("对不起!没有您要查的相关信息!")
}
STU shanchu() /*删除学生信息*/
{char name[10]
STU head,p1,p3
char ch
int b=0
p3=Outdat()
head=p3
printf("请输入您要查询信息的用户名:\n")
scanf("%s",name)
while(p3)
if(strcmp(name,p3->name)!=0)
{p1=p3
p3=p3->next
}
else
{ printf("这是您要删除的信息!\n")
printf("%s\t%d\t%s",p3->name,p3->num,p3->class)
printf("语文:")
printf("%d\t",p3->chinese)
printf("英语:")
printf("%d\t",p3->english)
printf("数学:")
printf("%d\t",p3->math)
printf("计算机:")
printf("%d\t",p3->computer)
b=1
printf("信息输出完毕!\n")
printf("您确实想删除以上信息吗!yes or no \n")
ch=getchar()
ch=getchar()
if(ch=='y'||ch=='Y')
{ p1->next=p3->next
free(p3)
printf("信息删除完毕!\n")
Indat(head)
return
}
}
if(b==0)
printf("对不起!没有与您要查的相关信息!")
}
xianshi() /*显示文件中的所有信息*/
{ STU p
p=Outdat()
while(p!=NULL)
{printf("%s\t%d\t%s",p->name,p->num,p->class)
printf("语文:")
printf("%d\t",p->chinese)
printf("英语:")
printf("%d\t",p->english)
printf("数学:")
printf("%d\t",p->math)
printf("计算机:")
printf("%d\t\n",p->computer)
p=p->next
}
printf("这是所有信息!")
}
eaverage()/* 计算学生的平均成绩和名次*/
{STU p3,head
float a
char ch
int i, b=0,j=1
char name[10]
SCO L,L1,L2
p3=Outdat()
head=p3=p3->next
L=L1=(SCO)malloc(NEM)
while(p3)//复制链表
{ L2=L1
a=(p3->chinese+p3->english+p3->math+p3->computer)/4
L2->aver=a
strcpy(L2->name,p3->name)
L1=(SCO)malloc(NEM)
L2->next=L1
p3=p3->next
}
L2->next=NULL
free(L1)//while
while(j)
{L1=L2=L
i=1
printf("请输入您要查的用户名!\n")
scanf("%s",name)
while(L1)
if(strcmp(name,L1->name)!=0)
L1=L1->next
else
{printf("用户已被找到!\n")
b=1
while(L2)
if(L1->aver>L2->aver||L1->aver==L2->aver)
L2=L2->next
else
{ i++
L2=L2->next}
printf("此学生的成绩情况是:\n")
printf("%s\t平均分是%f",L1->name,L1->aver)
printf("第%d名!",i)
break
}
if(b==0) printf("对不起!没有与您要查的相关信息!")
printf("您是否还想继续 yes or no!")
ch=getchar()
ch=getchar()
if(ch=='n'||ch=='N')
j=0
}
return
}
chinese() /* 语文成绩排名 */
{STU p3,head
SCO L,L1,L2
int k,max,j
p3=Outdat()
p3=p3->next
head=p3
max=0
j=0
L=L1=(SCO)malloc(NEM)
while(p3)
{ L2=L1
L2->aver=p3->chinese
strcpy(L2->name,p3->name)
L1=(SCO)malloc(NEM)
L2->next=L1
p3=p3->next
}
L2->next=NULL
free(L1)
while(L)
{ p3=head
max++
while(p3)
if(L->aver>=p3->chinese)
p3=p3->next
else
{j++
p3=p3->next
}
strcpy(stud[j].name,L->name)
stud[j].aver=L->aver
L=L->next
}
printf("语文成绩情况:\n")
for(k=0knext
head=p3
max=0
j=0
L=L1=(SCO)malloc(NEM)
while(p3)
{ L2=L1
L2->aver=p3->english
strcpy(L2->name,p3->name)
L1=(SCO)malloc(NEM)
L2->next=L1
p3=p3->next
}
L2->next=NULL
free(L1)
while(L)
{ p3=head
max++
while(p3)
if(L->aver>=p3->english)
p3=p3->next
else
{j++
p3=p3->next
}
strcpy(stud[j].name,L->name)
stud[j].aver=L->aver
L=L->next
}
printf("英语成绩情况:\n")
for(k=0knext
head=p3
max=0
j=0
L=L1=(SCO)malloc(NEM)
while(p3)
{ L2=L1
L2->aver=p3->math
strcpy(L2->name,p3->name)
L1=(SCO)malloc(NEM)
L2->next=L1
p3=p3->next
}
L2->next=NULL
free(L1)
while(L)
{ p3=head
max++
while(p3)
if(L->aver>=p3->math)
p3=p3->next
else
{j++
p3=p3->next
}
strcpy(stud[j].name,L->name)
stud[j].aver=L->aver
L=L->next
}
printf("数学成绩情况:\n")
for(k=0knext
head=p3
max=0
j=0
L=L1=(SCO)malloc(NEM)
while(p3)
{ L2=L1
L2->aver=p3->computer
strcpy(L2->name,p3->name)
L1=(SCO)malloc(NEM)
L2->next=L1
p3=p3->next
}
L2->next=NULL
free(L1)
while(L)
{ p3=head
max++
while(p3)
if(L->aver>=p3->computer)
p3=p3->next
else
{j++
p3=p3->next
}
strcpy(stud[j].name,L->name)
stud[j].aver=L->aver
L=L->next
}
printf("计算机成绩情况:\n")
for(k=0k printf("%s %f\n",stud[k].name,stud[k].aver)
printf("成绩输出完毕!")
}
void main()/*主函数*/
{ STU p
int j
print()
while(1)
{
printf("Enter choice:")
scanf("%d",&j)
if(j13)
{
printf("Enter num from 1 to 13:\n")
exit(1)
}
switch(j)
{case 1:
creat()
break
case 2:
insert()
break
case 3:
xiugai()
break
case 4:
find()
break
case 5:
print()
break
case 6:
shanchu()
break
case 7:
xianshi()
break
case 8:
eaverage()
break
case 9:
chinese()
break
case 10:
english()
break
case 11:
math()
break
case 12:
computer()
break
case 13:
exit(1)
break
}
scanf("%d",&j)
}
}
———————————— 用户使用手册 ——————————
程序功能:建立一个简单的学生管理系统,存储的学生信息至少包括:班级,学号,姓名,各个科目的成绩.能够完成的功能至少有:输入,查询,修改,删除学生信息,计算学生的
平均成绩,名次,按某个科目的成绩排序输出.
完成日期:2006年2月22日
版本:———
运行环境:Windows XP
版权人:黄涛 学号:2004551425 计算机3班
硬件要求:486以上机器,32M以上RAM,32M硬盘空间
本人保留所有版权.
使用方法:打开文件目录下的可执行文件即可运行程序,程序运行时,屏幕上会显示13个备选的键,每个键都可以完成一个 *** 作,如:插入,删除,修改,学生信息,计算成绩等等······
注意:在使用本程序之前请认真阅读手册.
***********************************************
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)