课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
课程设计
得分:
信电工程学院
《高级语言程序设计课程设计》报告
题目:
学生信息管理系统
班级:
10电信1
学号:
20100504161
姓名:
顾英德
指导教师:
黄为勇
2013年1月15日
目录
1程序目标及功能---------------------------------------------------1
1.1课题背景---------------------------------------------------1
1.2系统功能---------------------------------------------------------------1
1.3设计要求----------------------------------------------------------------1
2程序功能模块组成及流程图-------------------------------------------------2
2.1系统功能模块-----------------------------------------------------------2
2.2各模块流程图-----------------------------------------------------------2
3程序主要数据结构及函数列表---------------------------------------------4
3.1程序中使用的数据结构----------------------------------------------4
3.2函数列表--------------------------------------------------------------4
4程序代码及运行结果-------------------------------------------------------4
5总结与体会---------------------------------------------------------------------15
1.程序目标及功能
1.1课题背景
现代科学多元化已经开始了。
随着科学技术的快速发展和人们生活水平的提高,信息技术越来越深入人心。
计算机在人类生活和学习中充当着很重要的作用。
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。
管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。
而建立一个方便快捷的管理系统是每个管理者所希望的。
我设计的是一个关于学生信息管理的数据库系统,通过这个系统管理员可以简捷、方便的对学生信息进行增加、浏览、删除等功能,而用户也可以通过这个系统对学生信息进行查询等功能,从而使学校和个人更方便的查找,浏览学生的信息,并通过成绩排序对学生的情况作进一步的了解,对学生的管理更加便捷。
1.2系统功能
学生信息管理系统是一个小型学生信息管理程序,该软件能够实现学生信息表的建立,学生信息的添加,学生信息的显示,指定姓名或学号查询学生信息,学生信息的删除等简单管理功能。
程序要求提供简单友好易于操作的界面。
程序以C语言/MATLAB语言开发。
1.3设计要求
本课题要求设计实现“学生信息管理系统”程序。
该程序实现学生信息管理的基本功能,包括信息表的建立、显示等功能。
要求用动态链表实现该应用程序。
用函数分别实现动态链表的建立、动态链表输出等功能。
函数要求使用指针作形参。
2.程序功能模块组成及流程图
2.1系统功能模块
(1)学生节点数至少10个。
学生信息包括学号,姓名,性别,年龄,籍贯,电话号码及email地址。
(2)程序主界面包括程序名称及编程者学号、姓名、班级;同时要求输入功能号码,选择进入功能模块程序。
主界面格式及选择项(供参考)如下图1“系统主菜单”:
(中文英文均可)
(3)各模块功能:
A.创建学生信息表。
动态创建学生信息表,同时输入学生信息。
学生信息表用链表实现。
链表节点个数不少于10个。
B.输出学生信息。
把链表所有结点信息以表格形式输出。
C.追加学生信息。
D.查询学生信息。
输入一个姓名,查找该学号所在结点,输出该节点信息。
E.删除学生信息。
输入学号,删除该节点。
F.保存学生信息到磁盘文件。
建立一个磁盘文件,把所建立的表格写入文件。
F.从磁盘文件中读出学生信息。
2.2各模块流程图
3程序主要数据结构及函数列表
3.1程序中使用的数据结构
使用的数据结构是线性列表
3.2函数列表
xueshengxinxi*creatlink(void)
voidsavelink(xueshengxinxi*h)
xueshengxinxi*readlink(void)
xueshengxinxi*insert(xueshengxinxi*head)
xueshengxinxi*delet(xueshengxinxi*p0)
voidfind(xueshengxinxi*h)
voidmain()
4.程序代码及运行结果
程序代码
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#defineNsizeof(structstud)/*N为结构体变量的大小*/
/****************************************************************/
typedefstructstud/**/
{
charnumber[40];
charname[40];
charsex[40];
charage[80];
charcall[40];
charjiguan[80];/*把分数都声明称字符串*/
charemail[80];
structstud*next;
}xueshengxinxi;/*为结构体命名*/
/*自此,结构体的名称就是xueshengxinxi,以后可直接用这个名称来声明结构体*/
/****************************************************************/
/*创建链表信息,带回一个指向链表头的指针*/
xueshengxinxi*creatlink(void)
{
xueshengxinxi*p1,*p2,*head;/*p1为前一个指针,p2为后一个指针,都是临时的*/
inti=1;
charchoice;
head=p2=(xueshengxinxi*)malloc(N);/*"(xueshengxinxi*)"作用是使malloc返回的指针转换为指向结构体数据类型的指针"*"不可省,否则不是指针*/
head->next=NULL;/*新建的链表,只有一个头*/
choice='y';/*新链表,先满足初始条件*/
for(i=1;choice=='y'||choice=='Y';i++)/*循环的条件有输入者来定!
*/
{
p1=(xueshengxinxi*)malloc(N);/*p1为指向结构体类型的指针*/
printf("\n\n------------------------输入学生信息---------------------\n\n");
printf("请输入第%d个学生的信息:
\n",i);
printf("学号:
");
scanf("%s",p1->number);
printf("\n姓名:
");
scanf("%s",p1->name);
printf("\n性别:
");
scanf("%s",p1->sex);
printf("\n年龄:
");
scanf("%s",p1->age);/*输出的是字符串*/
printf("\n电话:
");
scanf("%s",p1->call);
printf("\n籍贯:
");
scanf("%s",p1->jiguan);/*输出的是字符串*/
printf("\n邮箱:
");
scanf("%s",p1->email);/*输出的是字符串*/
p2->next=p1;
p2=p1;
printf("\n是否继续?
(Y/N):
");
choice=getche();/*按任意键返回*/
printf("\n");
}
p2->next=NULL;/*这是链表的终结*/
return(head);
}
/***************************************************************-*/
/*保存链表信息的函数*/
voidsavelink(xueshengxinxi*h)
{
xueshengxinxi*p;/*声明结构体*/
FILE*fp;
charfliename[20];
printf("\n请输入你要保存的文件名:
");
scanf("%s",fliename);
if((fp=fopen(fliename,"wt"))==NULL)/*为输出打开一个文本文件*/
{
printf("写文件出错,按任意键退出!
");
getche();
exit
(1);
}
for(p=h->next;p!
=NULL;p=p->next)fprintf(fp,"%s%s%s%s%s%s%s\n",p->number,p->name,p->sex,p->age,p->call,p->jiguan,p->email);//向文件中写入数据//
printf("\n文件已成功保存,按任意键返回!
");
getche();/*按任意键返回*/
fclose(fp);
}
/****************************************************************/
/*读出已保存文件的信息*/
xueshengxinxi*readlink(void)
{
xueshengxinxi*head,*p,*q;
FILE*fp;
charfilename[20];
printf("\n请输入要打开的文件名:
");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL)
{
printf("读文件出错,按任意键退出!
");
getche();
exit
(1);
}
head=q=(xueshengxinxi*)malloc(N);
head->next=NULL;
while(!
feof(fp))
{
p=(xueshengxinxi*)malloc(N);/*建立新链表,并从文件中读出数据*/
fscanf(fp,"%s%s%s%s%s%s%s\n",p->number,p->name,p->sex,p->age,p->call,p->jiguan,p->email);
q->next=p;
q=p;
}
q->next=NULL;
fclose(fp);
printf("\n文件信息已正确读出,按任意键返回!
");
getch();
returnhead;
}
/****************************************************************/
xueshengxinxi*insert(xueshengxinxi*head)/*插入信息*/
{
xueshengxinxi*p;
p=(xueshengxinxi*)malloc(N);
printf("\n请输入要插入学生的信息:
\n");
printf("\n学号:
");
scanf("%s",p->number);
printf("\n姓名:
");
scanf("%s",p->name);
printf("\n性别:
");
scanf("%s",p->sex);
printf("\n年龄:
");
scanf("%s",p->age);
printf("\n电话:
");
scanf("%s",p->call);
printf("\n籍贯:
");
scanf("%s",p->jiguan);
printf("\n邮箱:
");
scanf("%s",p->email);
if(head->next!
=NULL)
{
p->next=head->next;/*插入数据操作代码*/
head->next=p;
}
printf("\n学生信息插入成功!
按任意键继续!
");
getche();
returnhead;
}
/****************************************************************/
/*删除信息*/
xueshengxinxi*delet(xueshengxinxi*p0)
{
charnum[20];
xueshengxinxi*p;
charchoice;
if(p0->next==NULL)
{
printf("信息出错!
按任意键退出!
");
getch();
exit
(1);
}
printf("\n请输入要删除学生的学号:
");
scanf("%s",num);
for(p=p0->next;strcmp(p->number,num)!
=0;p0=p,p=p->next);/*用比较的方法来找到要删除的学生的信息*/
printf("\n你要删除的信息如下,请确认是否删除:
\n");
printf("\n学号:
%s姓名:
%s性别:
%s年龄:
%s电话:
%s籍贯:
%s邮箱:
%s\n\n",p->number,p->name,p->sex,p->age,p->call,p->jiguan,p->email);
printf("\n是Y,否N:
");/*显示要删除的学生的信息*/
choice=getche();
if(choice=='Y'||choice=='y')
{
p0->next=p->next;/**/
free(p);
printf("\n文件删除成功!
");
}
printf("\n按任意键结束!
");
getche();
returnp0;
}
/****************************************************************/
voidfind(xueshengxinxi*h)/*查询信息*/
{
charnum[20];
xueshengxinxi*p;
printf("\n请输入你要查找的学生的学号:
");
scanf("%s",num);
for(p=h;strcmp(p->number,num)!
=0;p=p->next);
printf("你查找的学生信息如下:
\n");
printf("\n学号:
%s姓名:
%s性别:
%s年龄:
%s电话:
%s籍贯:
%s邮箱:
%s\n\n",p->number,p->name,p->sex,p->age,p->call,p->jiguan,p->email);
printf("按任意键继续!
");
getche();
}
voidprint(xueshengxinxi*p)/*显示全部信息*/
{
p=p->next;
while(p!
=NULL)
{
printf("\n学号:
%s姓名:
%s性别:
%s年龄:
%s电话:
%s籍贯:
%s邮箱:
%s\n",p->number,p->name,p->sex,p->age,p->call,p->jiguan,p->email);
p=p->next;
}
printf("\n按任意键继续!
");
getche();
}
/*******************************************************************************/
/*主函数*/
voidmain()
{
//system("color6");
/*设置颜色1(蓝色)是背景色代号F(亮白色)是前景色代号*/
intchoice=1,i,ok=1;/*choice用于选择对数据执行操作已经是1,i循环,一直会循环到i=4即退出,ok主界面选择*/
xueshengxinxi*head,*h;/*外部变量定义头指针*/
head=NULL;/*外部变量*/
i=1;
do
{
i++;
system("cls");/*把以前的操作痕迹清除*/
printf("\n================================================================\n");
printf("\n学生信息管理系统\n");
printf("\n================================================================\n");
printf("\n学号:
20100504161姓名:
顾英德班级:
10电信1班\n");
printf("\n1.建立新的学生信息.\n");
printf("\n2.读取已经建立文件.\n");
printf("\n3.退出;\n");
printf("\n================================================================\n");
printf("\n请输入你的选择:
");
scanf("%d",&ok);
if(ok==1)
{
system("cls");
head=creatlink();/*创建新链表并保存文件*/
savelink(head);
}
if(ok==2)
{
head=readlink();/*进入文件,对已知数据进行操作*/
for(i=1;choice!
=5;i++)
{
system("cls");
printf("\n\n\n----------学生信息管理系统-----------\n\n\n");
printf("1.添加学生信息;\n\n");
printf("2.删除学生信息;\n\n");
printf("3.查询学生信息;\n\n");
printf("4.显示学生信息;\n\n");
printf("5.退出;\n\n");
printf("请输入你要执行的操作序号:
");
scanf("%d",&choice);
switch(choice)
{
case1:
h=insert(head);savelink(h);break;/*增---对新信息进行保存*/
case2:
h=delet(head);savelink(h);break;/*删除后保存*/
case3:
find(head);break;/*查找*/
case4:
print(head);break;/*显示*/
case5:
printf("程序已退出\n");break;
}
}
}
}while(ok!
=3);
printf("\n系统运行由此结束!
\n\n");
}
5.总结与体会
通过一周的努力,终于完成了这次C语言程序设计。
在这个《学生信息管理系统》C语言课程设计中,完成了基本功能,即可以检索记录、新建新记录、删除记录、使用文件对记录进行保存和读取功能。
在开始进行课程设计时,先进行界面模块的总体把握,充分了解自己要设计的程序的总体的结构,从而,在其过程中能一个模块一个函数进行详细的构思,从而在调试程序时也显得比较轻松。
虽然出现了很多的错误,但是通过自己和同学的共同努力,终于找到错误并加以改正。
同时也要感谢老师的指导与帮助,使我能够在短时间内完成这份程序设计,十分的感谢老师。
总的来说,这次课程设计收获很多,为了完成这次设计,参考了一些书籍,细看了课本,了解了以前常忽视却很重要的东西,深化了对C语言的理解,进一步理解对C语言进行程序设计的方法和步骤,加深了结构化程序设计的思想,更重要的是,积累了很多调试程序的经验,为进一步学习C语言奠定了一定的基础,同时也为今后的学习和生活奠定了基础,有利于今后的发展。