文档视界 最新最全的文档下载
当前位置:文档视界 › C语言程序设计 学生信息管理系统

C语言程序设计 学生信息管理系统

C语言程序设计 学生信息管理系统
C语言程序设计 学生信息管理系统

C语言课程设计

姓名:徐宗博

学号: ************

班级: 061092

指导教师:曹老师

2011 年 6 月 25 日

目录

第一章:实习内容

1.1实习内容简介 (2)

1.2程序代号说明 (3)

第二章:程序流程图

第三章:函数模块介绍

3.1读取文件、存储文件 (6)

3.2 管理系统模块 (8)

3.3 恢复区系统模块 (12)

3.4 功能展示 (12)

第四章:实习总结 (16)

第五章:实习体会 (17)

附录:

参考文献 (19)

源代码 (19)

第一章:实习内容

1.1实习内容简介

题目:学生通讯录管理系统

要求:1.可实现信息的添加、删除,可按学号、姓名查询;

2.学生信息必须包含学号、姓名、学院、专业、籍贯。地址、电话号码;

3.必须有注释。

日期:2011年6月20日至27日,共8个半天。

地点:信息楼301

指导老师:曹雪莲

完成情况:

1.程序可完成信息的添加,可按学号、姓名分别查询;

2.程序可按姓名、学号分别删除,并在删除前显示删除学生的全部信息;

按姓名删除,若出现同名情况,会依次出现系统提示是否删除,可选择

删除或跳过;

3.在程序文件夹中有一“学生信息库”的txt文件,可查看学生系统里全

部学生信息;

4.设置有一个恢复区系统,可输出、查询删除的信息,并在可同文件夹中

“删除信息库”的txt文件中查看删除信息;

总体结构如下:

第二章:程序流程图

程序流程图:

本次实习我的思路就是,先从二进制文件中读取信息,形成链表,对链表进行基本操作,如输出、添加、删除、查找。程序结束时将链表保存在二进制文件和文本文件中。

管理系统流程图:

运行管理系统部分时,先从文件“information.xls”中读取数据(若无该文件则创建文件),构建链表;后续操作都是对于链表进行操作,如添加、查找、删除、输出等;离开该部分时则保存链表里的信息到已存在的“information.xls”,并以ASCII形式存储至“学生信息库.txt”,方便检查。

恢复区系统流程图:

恢复区系统思路与管理系统思路类似,连函数调用都是一样的,二进制文件名为“dinformation.xls”,文本文件名为“删除信息库.txt”。

具体函数模块功能将在第三章中具体介绍。

第三章:函数模块介绍

程序分为管理系统和恢复区系统两部分和读取文件、存储文件四部分,以下分别介绍。

3.1读取文件、存储文件

读取文件

该函数模块(程序名为creat)于管理系统或恢复区系统运行前运行,目的是读取二进制文件信息,构建链表;若无目标文件,则创建文件。返回值为头指针。

函数主体为:struct stu *p1,*p2;

struct stu *head;

while(fread(&(p1->inf),LEN,1,fp))//读取数据

{

n=n+1;//若读取数据成功节点数加一

if(n==1) head=p1;//给头结点赋值

else p2->next=p1;//加新的结构体

p2=p1;

p1=(struct stu *)malloc(LENS);

}

fclose(fp);

p2->next=NULL;//尾结点处指针置0

return(head);

存储文件

该函数模块分为两部分,以二进制形式存储链表信息(程序名为save)和以文本形式存储(程序名为txtsave)。二进制形式文件是为了读取文件,优点是快速;文本文件是为了方便检查,优点是明确可见。无返回值。

二进制形式存储程序为:

void save(struct stu *head,char filename[20])//存储链表信息

{

FILE *fp;

struct stu *p;

p=head;

fp=fopen(filename,"wb");//以二进制方式打开文件

while((p!=NULL)&&fwrite(&(p->inf),LEN,1,fp))//写入文件

{

p=p->next;

}

fclose(fp);

}

//其中head为链表头指针,filename为存储文件名,在主函数中已有定义。

存储在文本文件程序为:

void txtsave(struct stu *head,char filename[20])//以文本形式将链表输入文件

{

FILE *fp;

struct stu *p;

p=head;

fp=fopen(filename,"w");//以文本形式打开

while(p!=NULL)//链表不到尽头不停止

{

fprintf(fp,"%ld",(p->inf).num);//向文本文件中写入数据

fprintf(fp,"%10s",(p->inf).name);

fprintf(fp,"%10s",(p->inf).academy);

fprintf(fp,"%10s",(p->inf).majoy);

fprintf(fp,"%10s",(p->inf).province);

fprintf(fp,"%10s",(p->inf).address);

fprintf(fp,"%20s\n",(p->inf).phone);

p=p->next;

}

}

3.2管理系统模块

管理系统(名为system)主要有四个函数功能部分,分别为添加、删除、查找、输出,以下依次介绍:

添加

该模块函数名为add,无返回值,参数为链表头指针,功能为向已建立的链表中从键盘上输入信息。函数主体为:

struct stu *p1,*p2;//建立结构体指针

p2=head;

p1=(struct stu *)malloc(LENS);//输入信息

printf("\n学号(输入数值请小于32756):

");scanf("%d",&((p1->inf).num));

printf("\n姓名:");scanf("%s",(p1->inf).name);

printf("\n学院:");scanf("%s",(p1->inf).academy);

printf("\n专业:");scanf("%s",(p1->inf).majoy);

printf("\n省份:");scanf("%s",(p1->inf).province);

printf("\n地址:");scanf("%s",(p1->inf).address);

printf("\n电话号码:");scanf("%s",(p1->inf).phone);

while((p2->next)!=NULL)//移动指针到链表尾

{

p2=p2->next;

}

p2->next=p1; //移动指针

p2=p1;

p2->next=NULL;

删除

函数名为delet,返回值为指向结构体的链表头指针,参数为链表头指针,可按姓名和学号删除。若按姓名删除时,为防止同名情况,则查询到一个目标,就显示出信息,并提示是否删除。

1.按学号查找的函数主体为:

printf("请输入拟删除学生学号:\n");

long snum=0;

scanf("%ld",&snum);

struct stu *p1,*p2;

p1=head;

while(snum!=p1->inf.num&&p1->next!=NULL)//p1指向的学号不是要

找的节点,并且后面还有节点

{ p2=p1;p1=p1->next;}//p1后移

if(snum==p1->inf.num)//找到目标

{

print1(p1);deletinput(p1);//print1()为输出相应指针指向的节点信息deletinput()为向恢复区系统链表输入信息的函数,在后续3.3中会提及

if(p1==head) head=p1->next;//若p1指向头节点,将第二个节点位置赋予head

else p2->next=p1->next;//否则将下一结点位置赋给前一节点位置n--;

}

else printf("该学生不存在");

return(head);

2.按姓名查找(包含同名情况):

int select=0,count=0;//selet选择删除与否,count代表删除次数char sname[20];//定义要搜的名字

struct stu *p1,*p2;

p1=head,p2=head;

printf("请输入学生姓名:\n");

scanf("%s",sname);//输入学号

while(p1!=NULL)//历遍链表

{

if(strcmp(sname,p1->https://www.docsj.com/doc/a017731015.html,)==0) //与目标名字是否一致,相同为0

{

print1(p1);//若符合姓名条件,显示信息

printf("删除该生信息?\n删除选1\n按其它键不删除\n");//保证达到目标姓名时显示学生信息,可选择不删除

scanf("%d",&select);

if(select!=1)

{p2=p1;p1=p1->next;continue;}//不删除就再次循环

else

{

n--;

deletinput(p1);

count++;//删除数加一

if(p1==head) head=p1->next;//删除信息

else p2->next=p1->next;//更改指针,绕过目标

}

}

p2=p1;p1=p1->next;

}

if(count==0) printf("该生信息不存在");//若未删除则视为未发现目标学生

return(head);

查找

函数名为search,参数为链表头指针,无返回值。其中查找可按姓名与学号进行查找,若找到目标即出现在屏幕;若出现同名情况,则依次显示。

查找与删除函数语句类似,但是删除要求目标的前一个节点的指针与目标节点的指针都能知道;而查找要求则低多了。因为这个原因,在加上我是先写的查找,所以删除中未调用查找函数。

按学号查找函数主体如下:

long snum;//定义要查询学号变量

printf("请输入学号:\n");

scanf("%ld",&snum);//输入学号

while(p!=NULL)//历遍链表

{

p=search_num(p,snum);//此为调用函数,效果是查找到与目标相同的信息然后返回相应指针

if(p!=NULL) print1(p);//若查找到目标,输出

else break;

p=p->next;//传递指针,继续

}

按姓名查找函数主体如下:

char sname[20];//定义要查询姓名的变量

printf("请输入姓名:\n");

scanf("%s",sname);//输入姓名

while(p!=NULL)

{

p=search_name(p,sname);//与上文中search_num类似,返回同名目标的指针

if(p!=NULL) print1(p);//若查找到目标,输出

else break;

p=p->next;//传递指针

}

输出

函数名为print,参数为链表头指针head,无返回值。函数作用就是沿链表依次输出学生信息。函数主体为:

printf("全体学生数据如下:\n");

if(n==0) {printf("无学生信息");return;}//若节点为0则返回

struct stu *p;

p=head;

while(p!=NULL)//循环输出

{

printf("\n学号 %d",(p->inf).num);

printf("\n姓名 %s",(p->inf).name);

printf("\n学院 %s",(p->inf).academy);

printf("\n专业 %s",(p->inf).majoy);

printf("\n省份 %s",(p->inf).province);

printf("\n地址 %s",(p->inf).address);

printf("\n电话号码 %s\n",(p->inf).phone);

p=p->next;

}

3.3恢复区系统模块

恢复区系统(其名为recover)是为了显示被删除信息而建立的,在函数运行之初便建立了恢复区链表,头指针设为rhead,与管理系统头指针head相区别。并且,rhead被设为全局变量,方便被函数调用。

恢复区系统主要有查找、输出功能,其功能模块基本调用管理系统的函数,所以不再赘述。而恢复区的输入函数,即管理区删除信息时将信息输入恢复区链表的函数,上文已提及,即deletinput,此为连接恢复区与管理系统的桥梁,只不过是单行的。函数为:

void deletinput(struct stu *p)//将删除信息导入恢复区链表,p为要删除信息的指针

{

struct stu *p1,*p2;

p1=rhead;//恢复区链表头节点位置

while(p1->next!=NULL)//指针置于链表尾端

{p1=p1->next;}

p2=p1;

p1=(struct stu *)malloc(LENS);//复制结构体信息

p1->inf.num=p->inf.num;

strcpy(p1->https://www.docsj.com/doc/a017731015.html,,p->https://www.docsj.com/doc/a017731015.html,);

strcpy(p1->inf.academy,p->inf.academy);//复制字符数组,以下类似

strcpy(p1->inf.majoy,p->inf.majoy);

strcpy(p1->inf.province,p->inf.province);

strcpy(p1->inf.address,p->inf.address);

strcpy(p1->inf.phone,p->inf.phone);

p2->next=p1;

p1->next=NULL;//链表尾设为NULL

}

以上程序函数模块基本介绍完毕,由于篇幅有限,很多函数模块只摘录了主体,若仍有疑惑处,可参考附录中的源代码。

3.4功能展示

主界面:

管理系统:

void system()

添加:

void add(struct stu *head)

可连续添加

查找:

void search(struct stu *head)

删除:

struct stu *delet(struct stu *head)

按学号删除:

按姓名查询,可面对重名情况:

输出:

void print(struct stu *head)

恢复区系统菜单:

void recover()

文本形式保存:

void save(struct stu *head,char filename[20])

删除信息导入恢复区链表:

void deletinput(struct stu *p)

第四章:实习总结

本次实习,我制作了两个版本的程序,一个是简版,一个是升级版。其实,简版就是管理系统,升级版在简版的基础上还包含了恢复区系统。这也算是实现了程序的升级吧,安全性方面算是达标了。

本次实习的不足主要有:

1.实用性不足。程序中学生信息定义的是长整型,故范围有限,不能大于32756,否则就会溢出;如果定义为无符号的长整,也不过翻一番而已,并未增添多少位,我校学号可是有11位。但这样方便比较给变量赋值,并且在查找中已有查找姓名字符串的应用了,用长整型丰富了查找类型;

其实完全可以定义学号为字符型数组,虽说浪费空间,但是方便输入较长数值,且比较也很方便,可以直接调用查找姓名字符串的函数。

2.程序中函数模块利用率不高,除了读取、存储、查找、输出这四个模块被两个系统调用外,其他删除、添加只有管理系统用到;倒是print1这么一个输出单一节点信息的程序被调用多次;

3.函数模块十分庞大,很多程序语句充斥在其中,没有很好的分成几部分子函数,方便调用,这也导致了函数调用率不高;

4.因为思路原因,程序中有三个全局变量,不利于程序的移植,可移植性不高;

5.程序中查找模块与删除模块没有结合好,导致在删除中又查找了一遍;

说到底还是目标不一样,查找函数只要求目标节点的指针,而删除函数要前一个节点和目标节点的指针,而且链表是单向的,知道后一个节点但不能知道前一个节点。若用双向链表,那样就可以将删除与查找较好的结合在一起了。

6.恢复区只有查找、输出功能,没有恢复与删除功能,如此只能添加不能删除,恢复区文件会越来越大;因为时间问题没有建立恢复函数,其实建立也不难,只是会与恢复区导入函数类似,再增加一全局变量而已;

7.使用链表所以未排序。如果要给链表排序,可以在插入信息时就按顺序插入,但是这势必增加程序运行负担,而且效率不高,因为链表是单向的。

可以用二叉树,如果那样的话效率就高多了,但是二叉树我还不会。

8.程序视图就是C语言的黑框,没有美观可言。C++的视图好一些,我也想过用C++编译一个窗口,然后在程序中调用。但是C++还没学会,而且在调试程序的过程中遇到一些困难让我遗忘了这个想法,曾看程序看到凌晨两点,所以想法没有实践。

9.在软件技术普及的今天,做个数据库已是小菜一碟,很到软件可以使用,如Microsoft Office Access,并且功能极其强大,比我花了几天时间做出来的高级不知多少倍。与那些专业程序相比,我的这程序不值一提,也就是练习练习C语言而已。

第五章:实习感受

此次实习在一个凉爽的夏日开始,这在武汉极反常。因为我们考试基本考完了,只剩下一门英语了,所以实习时间比较充裕。

实习的题目也不算太难,思路很清晰,总共三步走:1.读取文件;2.处理链表;3.保存文件。操作的主体是链表,原以为会很轻松,但还是遇到很多问题,以前上课时从未想到过。

经历过基本一天都在看程序的时间,我发现我懂的太少,要学的太多。对文件的操作我一直都没注意,现在才发现其乐无穷;以前觉得链表很难,现在轻松写出程序。学习与实践果然是不可分割的。

实习中,大家八仙过海各显神通,用链表是比较传统的,而且节省内存,有的用数组,这也可以理解,方便使用,排序便利;有的直接用文件C语句查询、删除,让我大开眼界,文件还能这么用!在写报告时看到一篇用指针数组做的程序,相当有意思。

发现水平还是不够,同学可以用C语言编出一个比较漂亮的界面,还可以随意调用文件操作,实在让人赞叹不已。

此次实习加强了我对链表的理解,很多以前迷糊的概念得到了明确,亦让我感到C语言强大之处,直接操作内存,实在很暴力。

一句诗概括此次实习,“山重水复疑无路,柳暗花明又一村”;如今C 语言实习已然结束,但是对于计算机语言的学习决不能放松,“雄关漫道真如铁,而今迈步从头越”。现在的世界是信息化的,我们现在对于Matlab 的要求也很大,C语言也是其基础。

路漫漫其修远兮,吾将上下而求索。

感谢曹老师抽出时间将C语言实习提前和这八天来的指导,同时亦感谢大家这些天来的支持与帮助,此外额外感谢武汉夏天罕见的凉爽天气,感谢生活。

附录

参考书目

1.谭浩强着《C语言程序设计》 2005年7月第3版298-299、300、302-303、338页

2. 吴煌坚学长的实习报告

源代码

#include

#include

#include

#define NULL 0

#define LEN sizeof(struct student)

#define LENS sizeof(struct stu)

struct student//学生信息结构体

{

long num;//学生学号

char name[20];//学生姓名

char academy[20];//学院

char majoy[10];//专业

char province[10];//省份

char address[20];//地址

char phone[11];//电话号码

};

struct stu//带学生信息结构体的链表单位

{

struct student inf;

struct stu *next;//后续链表地址

};

int n;//记录节点个数

int searchnum;//搜索个数,保证未搜索到时可显示没搜到

struct stu *rhead;//方便全局调用恢复区链表

struct stu *creat(char filename1[20])//创建链表,从文件中读取数据,返回头指针

{

struct stu *head;//链表头指针

struct stu *p1,*p2;//指针变量

p1=p2=(struct stu *)malloc(LENS);

FILE *fp;//打开文件读取数据

if((fp=fopen(filename1,"rb"))==NULL)//若文件不存在则建立文件{

printf("暂无任何学生信息\n");

fp=fopen(filename1,"wb+");//建立文件

fclose(fp);

p1->next=NULL;

return(p1);

}

else //读取文件信息,建立链表

{

n=0;//此时无结点

head=p1;

while(fread(&(p1->inf),LEN,1,fp))

{

n=n+1;

if(n==1) head=p1;//给头结点赋值

else p2->next=p1;//加新的结构体

p2=p1;

p1=(struct stu *)malloc(LENS);

}

fclose(fp);

p2->next=NULL;//尾结点处指针置0

return(head);

}

}

void save(struct stu *head,char filename[20])//存储链表信息{

FILE *fp;

struct stu *p;

p=head;

fp=fopen(filename,"wb");//以二进制方式打开文件

while((p!=NULL)&&fwrite(&(p->inf),LEN,1,fp))//写入文件 {

p=p->next;

}

fclose(fp);

}

void deletinput(struct stu *p)//将删除信息导入恢复区链表{

struct stu *p1,*p2;

p1=rhead;//恢复区链表头节点位置

while(p1->next!=NULL)//指针置于链表尾端

{p1=p1->next;}

p2=p1;

p1=(struct stu *)malloc(LENS);//复制结构体信息

p1->inf.num=p->inf.num;

strcpy(p1->https://www.docsj.com/doc/a017731015.html,,p->https://www.docsj.com/doc/a017731015.html,);

strcpy(p1->inf.academy,p->inf.academy);

strcpy(p1->inf.majoy,p->inf.majoy);

strcpy(p1->inf.province,p->inf.province);

strcpy(p1->inf.address,p->inf.address);

strcpy(p1->inf.phone,p->inf.phone);

p2->next=p1;

p1->next=NULL;

}

void txtsave(struct stu *head,char filename[20])//以文本形式将链表输入文件

{

FILE *fp;

struct stu *p;

p=head;

fp=fopen(filename,"w");//以文本形式打开

while(p!=NULL)//链表不到尽头不停止

{

fprintf(fp,"%ld",(p->inf).num);//向文本文件中写入数据

fprintf(fp,"%10s",(p->inf).name);

fprintf(fp,"%10s",(p->inf).academy);

fprintf(fp,"%10s",(p->inf).majoy);

fprintf(fp,"%10s",(p->inf).province);

fprintf(fp,"%10s",(p->inf).address);

fprintf(fp,"%20s\n",(p->inf).phone);

p=p->next;

}

}

void print1(struct stu *p)//输出单个学生结构体信息

{

printf("\n学号 %d",(p->inf).num);

printf("\n姓名 %s",(p->inf).name);

printf("\n学院 %s",(p->inf).academy);

printf("\n专业 %s",(p->inf).majoy);

printf("\n省份 %s",(p->inf).province);

printf("\n地址 %s",(p->inf).address);

printf("\n电话号码 %s\n",(p->inf).phone);

}

struct stu *search_name(struct stu *p,char sname[20])//按姓名搜索{

while(p!=NULL)

{

if(strcmp(sname,p->https://www.docsj.com/doc/a017731015.html,)==0)

{++searchnum;return(p);}//若查找到目标,返回指针

p=p->next;

}

if(searchnum==0) printf("没有该学生信息");

return(NULL);//返回NULL以保证返回值

}

struct stu *search_num(struct stu *p,long snum)//按学号搜索

{

while(p!=NULL)

{

if(snum==(p->inf.num)) {++searchnum;return(p);}//若查找到目标,返回指针

p=p->next;

}

if(searchnum==0) printf("没有该学生信息");

return(NULL);//返回NULL以保证返回值

}

void add(struct stu *head)//添加信息

{

int input=1;//给输入按钮赋初值

struct stu *p1,*p2;//建立结构体指针

p2=head;

while(input!=0)

{

printf("请选择:\n输入0 返回主菜单\n输入1 继续\n");

scanf("%d",&input);//输入按钮赋值

if(input==0) break;//判断是否返回主菜单

if(n==0) //链表无节点,给*head填充数据

{

printf("\n学号(输入数值请小于32756):");scanf("%d",&((head->inf).num));

printf("\n姓名:");scanf("%s",(head->inf).name);

printf("\n学院:");scanf("%s",(head->inf).academy);

printf("\n专业:");scanf("%s",(head->inf).majoy);

printf("\n省份:");scanf("%s",(head->inf).province);

printf("\n地址:");scanf("%s",(head->inf).address);

printf("\n电话号码:");scanf("%s",(head->inf).phone);

n++;p2->next=NULL;continue;//增加节点,节点数n加1,同时跳出此次循环,进入下一次

}

p1=(struct stu *)malloc(LENS);//输入信息

printf("\n学号(输入数值请小于32756):");scanf("%d",&((p1->inf).num));

printf("\n姓名:");scanf("%s",(p1->inf).name);

printf("\n学院:");scanf("%s",(p1->inf).academy);

printf("\n专业:");scanf("%s",(p1->inf).majoy);

printf("\n省份:");scanf("%s",(p1->inf).province);

printf("\n地址:");scanf("%s",(p1->inf).address);

printf("\n电话号码:");scanf("%s",(p1->inf).phone);

while((p2->next)!=NULL)//移动指针到链表尾

{

p2=p2->next;

}

p2->next=p1; //移动指针

p2=p1;

p2->next=NULL;

n++;//节点数加1

}

}

void search(struct stu *head)//搜索信息

{

searchnum=0;

if(n==0) {printf("此时无数据");return;}//节点数为0状态

struct stu *p;

p=head;

printf("请输入拟搜索信息:\n");

printf("按姓名查找请按1\n按学号查找请按2\n");//分类查找

int input=0;

scanf("%d",&input);//导入分类

if(input==1)//按姓名查找

{

char sname[20];

printf("请输入姓名:\n");

scanf("%s",sname);//输入姓名

while(p!=NULL)

{

p=search_name(p,sname);

if(p!=NULL) print1(p);//若查找到目标,输出

else break;

p=p->next;//传递指针

}

}

else if(input==2)//按学号查找

{

long snum;

printf("请输入学号:\n");

scanf("%ld",&snum);//输入学号

while(p!=NULL)

{

p=search_num(p,snum);

if(p!=NULL) print1(p);//若查找到目标,输出

else break;

p=p->next;//传递指针

}

}

else {printf("输入错误");return;}

}

struct stu *delet(struct stu *head)//删除信息

{

if(n==0) {printf("无学生信息");return(head);}

int input=0;//选择变量:学号、姓名

printf("按姓名删除请按1\n按学号删除请按2\n");//分类删除

scanf("%d",&input);

if(input==2)//按学号删除(学号默认唯一)

{

printf("请输入拟删除学生学号:\n");

long snum=0;

scanf("%ld",&snum);

struct stu *p1,*p2;

p1=head;

while(snum!=p1->inf.num&&p1->next!=NULL)//p1指向的学号不是要找的节点,并且后面还有节点

{ p2=p1;p1=p1->next;}//p1后移

if(snum==p1->inf.num)//找到目标

{

print1(p1);deletinput(p1);

if(p1==head) head=p1->next;//若p1指向头节点,将第二个节点

位置赋予head

else p2->next=p1->next;//否则将下一结点位置赋给前一节点位置

n--;

}

else printf("该学生不存在");

return(head);

}

else if(input==1)//按姓名删除(姓名可以重复)

{

int select=0,count=0;//选择删除与否

char sname[20];

struct stu *p1,*p2;

p1=head,p2=head;

printf("请输入学生姓名:\n");

scanf("%s",sname);//输入学号

while(p1!=NULL)//历遍链表

{

if(strcmp(sname,p1->https://www.docsj.com/doc/a017731015.html,)==0)

{

print1(p1);//若符合姓名条件,显示信息

printf("删除该生信息?\n删除选1\n按其它键不删除\n");//保证达到目标姓名时显示学生信息,可选择不删除

scanf("%d",&select);

if(select!=1)

{p2=p1;p1=p1->next;continue;}//不删除就再次循环

else

{

n--;

deletinput(p1);

count++;//删除数加一

if(p1==head) head=p1->next;//删除信息

else p2->next=p1->next;//更改指针,绕过目标

}

}

p2=p1;p1=p1->next;

}

if(count==0) printf("该生信息不存在");//若未删除则视为未

发现目标学生

return(head);

}

else {printf("输入错误");return(head);}

}

void print(struct stu *head)//输出全部数据·数据

{

printf("全体学生数据如下:\n");

if(n==0) {printf("无学生信息");return;}//若节点为0则返回

struct stu *p;

p=head;

while(p!=NULL)//循环输出

{

printf("\n学号 %d",(p->inf).num);

printf("\n姓名 %s",(p->inf).name);

printf("\n学院 %s",(p->inf).academy);

printf("\n专业 %s",(p->inf).majoy);

printf("\n省份 %s",(p->inf).province);

printf("\n地址 %s",(p->inf).address);

printf("\n电话号码 %s\n",(p->inf).phone);

p=p->next;

}

}

void system()

{

struct stu *head;//定义头指针变量

char filename1[20]="information.xls";//命名系统数据库

char filename2[20]="dinformation.xls";//命名恢复区文件数据库 char filename3[20]="学生信息库.txt";//命名系统文本文件char filename4[20]="删除信息库.txt";//命名恢复区文本文件

rhead=creat(filename2);//创建恢复区链表

head=creat(filename1);//创建系统链表

int select;//菜单选择变量

do

{

printf("\n\n\n欢迎进入红星闪闪学生信息管理系统\n********************************");//标题

printf("\n\n1.填加学生信息\n2.查找学生信息\n3.删除学生信息

\n4.输出全体学生信息\n5.退出\n\n\n");//菜单

scanf("%d",&select);

switch(select)//菜单选择进入相关子程序

{

case 1:add(head);break;//添加

case 2:search(head);break;//搜寻

case 3:head=delet(head);break;//删除,返回head

case 4:print(head);break;//输出

case 5:break;//跳出菜单

default:printf("ERROR");//输入错误

}

}while(select!=5);

printf("欢迎闪人\n");

save(head,filename1);//存储管理系统链表中信息

save(rhead,filename2);//存储恢复区链表中信息

txtsave(head,filename3);//管理系统中信息以文本形式保存在“学生数据库”中

txtsave(rhead->next,filename4);//恢复区中信息以文本形式保存在“删除信息库”中

}

void recover()// 恢复区系统

{

int select=0;

char filename2[20]="dinformation.xls";

rhead=creat(filename2);

do

{

printf("\n\n\n********************************\n欢迎进入红星闪闪学生信息恢复区\n********************************\n");//标题printf("\n\n1.查找学生信息\n2.输出全体删除信息\n3.退出\n\n\n");//菜单

scanf("%d",&select);

switch(select)//菜单选择进入相关子程序

{

case 1:search(rhead);break;//搜寻

case 2:print(rhead);break;//输出

case 3:break;//跳出菜单

default:printf("ERROR");//输入错误

C语言程序设计第四版第六章答案_谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

C++实现:简单的学生信息管理系统

<< endl << endl; cout << "按下1:进入学生信息管理系统." << endl; cout << "按下0:退出." << endl; cout << "-----------------------------------------------------" << endl<> flagOperateInformation; (); cout << endl; if (flagOperateInformation) EditMenu(); } } << endl; cout << "按下2:修改学生信息." << endl; cout << "按下3:删除学生信息." << endl; cout << "按下4:显示学生信息." << endl; cout << "按下5:按学号升序排序" << endl; cout << "按下6:读入已有信息(暂时没实现)" << endl; cout << "按下7:将信息输出(暂时没实现)" << endl; cout << "按下8:显示系统内所有学生的信息" << endl; cout << "按下0:返回上一级." << endl; cout << "--------------------------------------------" << endl << endl; cin >> flagContinueOperation; (); cout << endl; switch (flagContinueOperation) { case 1:AddStudentPersonalInformation(1); break; case 2:ModifyStudentInformation(); break; case 3:DeleteStudentInformation(); break; case 4:DisplayStudentInformation(); break; case 5:RankByID(); break; case 6:cout << "功能暂未实现" << endl; break; case 7:cout << "功能暂未实现" << endl; break; case 8:DisplayAllStudentInformation(); break; case 0:break; } } } tudent_WritePersonalInformation(iD,name,address,phone); cout << "基本信息输入成功!" << endl << "------------------------------" << endl; } tudent_WriteMaPhEgGrade(mathGrade, physicsGrade, englishGrade); cout << "学习成绩输入成功!" << endl

大学学生餐厅管理信息系统

大学学生餐厅管理信息系 统 Last revision on 21 December 2020

系统背景 随着计算机技术和现代通信技术的发展,人类已经步入数字化和网络化为特征的知识经济时代,人们对各种信息量的需求也逐渐增大。由于当前学校的规模不断扩大,学生数量不断增加,学生信息量也不断增长,食堂管理工作成为学校各项管理工作的一个重要部分,学校后勤管理工作也日趋繁杂,众多的学生和教工食堂地理位置分散,又要实现统一的协调管理,面对庞大的工作量,如何有效提高食堂管理工作的效率是学校急需解决的问题。 同时,随着我校高速发展以及不断地扩招,我们可以发现由于西校区人数众多,中午时间吃饭人员无法分散,造成食堂窗口大面积拥堵,北村餐饮一条街人山人海,连站着的地方都没有,通常情况是下课以后如果跑的不快的话,往往要等上20多分钟才能顺利就餐。这一状况不仅造成一些同学在中午临近下课时不能专心听讲,接近半个小时听课效率低下,而且中午时间众多的就餐人员造成了食堂工作人员的高负荷工作,同时失误增加,例如经常出现算错就餐费用的情况,做错饭菜的情况等一系列错误。 为了有效解决以上问题,就不得不借助现代化的管理模式——网络管理模式。这样不仅提高了工作效率,也避免了以前手工作业的麻烦,从而使得管理者能够准确,有效的管理餐饮。 学校食堂管理信息系统是一个实用并且是与我们的学校生活密切相关的一个管理信息系统;如果能够很好的研究、开发并加以利用,那么就会提高食堂的效益,降低食堂的成本,降低食堂的饭、菜价从而能够给学校的学生带来莫大的利益和好处。 本文首先对学位生食堂管理信息系统进行需求分析,阐述高校食堂管理工作流程,分析高校食堂管理存在的问题并提出如何用管理信息系统的方法来解决存在问题。 信息管理系统(MIS)是一门新兴的、集管理科学、信息科学、系统科学及计算机科学为一体的综合型学科,研究的是信息管理活动的全过程,以便有效地管理信息,提供各类管理决策信息,辅助企业进行现代化管理。管理信息系统具备数据处理、计划、控制、预测和辅助决策功能,具体作用如以下5点内容: (1)用统一标准处理和提供信息,排除使用前后矛盾的不完善的数据。 (2)完整、及时提供在管理及决策中需要的数据。 (3)利用指定的数据关系分析数据,客观预测未来。 (4)向各级管理机构提供不同的详细程度的报告,缩短分析和解决时间。 (5)用最低的费用最短的时间提供尽可能精确、可靠地信息,以便使决策者选择最佳的实施方案,以提高企业的经济效益。

学生信息管理系统

全国学前教育管理信息系统 培训上机指南 一、网址、用户名及密码 1、专题网址:https://www.docsj.com/doc/a017731015.html,/,系统由专题右上方《管理系统入口》进入。 2、用户名(另发)。 3、测试系统初始密码统一为xueqian@2014(仅在培训时为此密码),请勿在培训时修改此密码。在使用正式系统时请修改密码。 二、系统登录注意事项 1、建议电脑为XP系统的情况下使用火狐或谷歌浏览器登录系统。 2、登录系统前,须进行浏览器设置,设置方法如下:“工具”→“Internet选项”→“隐私”→“高级”→勾选“替代自动cookie处理”和“总是允许会话cookie”。 3、不要使用同一浏览器登录多个用户。 4、在输入用户名和密码时注意键盘大小写的切换。 5、登录系统时,如密码连续五次输入错误,系统会自动锁定该账号,锁定时间为15分钟,15分钟以后才能再登录系统,建议骨干学校和市州在登录时如输错4次密码时不要再进行第5次密码的输入,可用同级或上级的系统管理员账号(A开头的账号)重置密码,再进行系统登录。

三、需完成任务 各学校使用学校级系统,市州使用县、市级系统,骨干学校与市州配合完成各项流程(机构管理、幼儿管理、业务管理、一期数据管理、机构在园幼儿情况、系统管理),具体操作步骤如下(以县级学校为例): (一)机构管理 1、使用机构级账号(普通用户)登录系统,进入“机构管理”->“基本信息管理”,进行学校扩展信息的填写(基本信息由系统自动导入),此处应注意“提交”与“保存”两个按钮的区别。 2、使用区县级账号(审核用户)登录系统,进入“业务管理”->“机构数据管理” ->“基本信息审核”,审核学校提交的基本信息。 3、使用机构级账号(普通用户)登录系统,进入“机构管理”->“办学条件信息管理”,根据提示编辑办学条件基本信息与办学条件建筑信息(该页面有两个选项卡),并提交审核。 4、使用区县级账号(审核用户)登录系统,进入“业务管理”->“机构数据管理” ->“办学条件信息审核”,审核学校提交的基本信息。 5、使用机构级账号(普通用户)登录系统,进入“机构管理”->“班级信息管理”,至少创建5个以上的班级(最好有连续的年级)。

C语言程序设计(谭浩强)第四版-课后答案

第一章程序设计和C语言【第15页】 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6 #include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; }

3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和 return 0; } 3-2-2 #include #include int main() {double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次

简单学生信息管理系统设计

——综合性程序设计 题目:简单学生信息管理系统(序列化版)班级: : 学号:

实验目的: 1.综合运用输入、输出的知识,用序列化方法保存、读入数组容。 2.设计实现一个简单的信息管理系统。 实验容: 编写能够满足如下条件的程序,分两次四个课时完成 1.声明Student类,该类实现Serializable接口以表明该类可 以进行序列化。该类有、学号、math、os、java用来存放 对应的成绩,在构造方法中进行、学号、课程成绩的赋值。 Override有Object继承来的tostring方法已便友好格式显 示自己的属性; 2.建立一个类,利用数组来存储多个Student,写完一个方法, 在main中写一段测试代码,运行以保证目前所做工作的 正确性,正确后再写其他代码。有以下方法: 1)add(Student stu):增加新的学生,人数满时显示人满或是new一个更长的数组,把现有的Student复制到新 数组 2)dispAll():可以显示所有的学生信息(测试add是否正确) 3)findById(long id):可以按照学号来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。 4)findByName(string name):可以按照来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。 (判断是否相等使用string类的equalsIgnoreCase方 法) 5)delBy Id(long id): 可以按照id来删除学生信息,然后显示找到该人,若查无此人的话显示错误信息。 6)save():利用ObjectOutputStream 来把数组写入文件中,需要考虑在什么时候调用该方法。 7)load():利用ObjectIntputStream 来进行反序列化,得到以前保存的容,注意要考虑以前未保存容的情况, 可返回错误信息。 3.在控制台显示一个菜单,并实现相应的功能。菜单如下: 1显示所有学生信息2按学号查找 3 按查找 4 按学号删除 5 保存 6 读入7 退出 请输入数字(1-7): 程序代码

学生信息管理系统(完整)

学生信息管理系统(总体设计) 1、管理系统功能模块设计 本系统需要完成的功能主要有: (1)、输入学生基本信息、所在班级、所学课程和成绩等。 (2)、学生信息的查询,包括查询学生基本信息、所在班级、已学课程和成绩等。(3)、学生信息的修改。 (4)、班级信息的输入,包括输入班级设置、年级信息等。 (5)、班级信息的查询。 (6)、班级信息的修改。 (7)、班级课程信息的输入。 (8)、班级课程信息的修改。 (9)、学生课程添加和修改。 (10)、学生成绩信息的输入。 (11)、学生成绩信息的修改。 (12)、学生成绩信息的查询。 (13)、学生成绩信息的统计。 2、功能模块设计:

3、数据库设计:

学生信息管理系统(需求分析)

1.系统开发背景分析 系统的功能取决开用户的需求。随着科技进步和信息时代的到来,教育的普及程度起来起高,学校的人数也在迅速的增长,怎样的管理好成千上万的学生,已经成为一个学校的管理者必须面对的问题。编写本报告的目的就是用最少的代价,尽可能短的时间内确定问题是否能够解决,通过对学校的一些管理软件的调研分析,发现了一些不足,所以拟做此系统,使学生信息的管理更加准确,安全和快捷。 在本次试验中包括的模块有学生信息管理、课程信息管理、成绩信息管理和班级信息管理等几项,各项管理工作涉及到的内容用下面的关系模式表示。a)学生(学号,姓名,性别,年龄,班级,电话,备注,出生日期,入学时间, 班级编号,家庭地址) b)课程(课程编号,课程名称,课程类别,学分,学时) c)班级(系,班级号,指导老师) 2.系统分析 1.抽象出当前系统的逻辑模型 画出反映当前系统工作的数据流程图。数据流程图是逻辑模型的图形表示,即使不是专业的计算机技术人员也能非常容易理解,它是一种很好的系统构造的表示方法。画数据流程图是应该从已获得的人工处理流程中去掉物理因素,只保留数据、信息处理部分。 2.系统功能分析 系统主要用于学校学生信息管理,主要任务是用计算机对学生各种信息进行日常管理,如:查询、修改、增加、删除。 3.系统目标设计 根据本校的实际情况,利用校园网而设计一套针对性和功能都比较强的学生信息管理系统,对学生信息管理系统进行科学的分类、录入、查询. 4.开发设计思想 尽量采用学校现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用资源,提高系统开发的水平和应用效果的目的。系统应该符合学校学生信息管理的规定,满足学校学生日常管理的需要,达到操作过程中的直观、方便、实用、安全等要求。强调多部门合作,学生工作设计面广泛,应该考虑各部门各

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } 3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;

简单学生信息管理系统

简单学生信息管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

——综合性程序设计 题目:简单学生信息管理系统(序列化版)班级: 姓名: 学号:

实验目的: 1.综合运用输入、输出的知识,用序列化方法保存、读入数组内容。 2.设计实现一个简单的信息管理系统。 实验内容: 编写能够满足如下条件的程序,分两次四个课时完成 1.声明Student类,该类实现Serializable接口以表明该类可 以进行序列化。该类有姓名、学号、math、os、java用 来存放对应的成绩,在构造方法中进行姓名、学号、课 程成绩的赋值。Override有Object继承来的tostring方法 已便友好格式显示自己的属性; 2.建立一个类,利用数组来存储多个Student,写完一个方 法,在main中写一段测试代码,运行以保证目前所做工 作的正确性,正确后再写其他代码。有以下方法: 1)add(Student stu):增加新的学生,人数满时显示人满或是new一个更长的数组,把现有的Student复制 到新数组 2)dispAll():可以显示所有的学生信息(测试add是否正确) 3)findById(long id):可以按照学号来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。 4)findByName(string name):可以按照姓名来查找,然后显示符合条件的学生信息,查无此人的话显示错误 信息。(判断姓名是否相等使用string类的 equalsIgnoreCase方法) 5)delBy Id(long id): 可以按照id来删除学生信息,然后显示找到该人,若查无此人的话显示错误信息。 6)save():利用ObjectOutputStream 来把数组写入文件中,需要考虑在什么时候调用该方法。 7)load():利用ObjectIntputStream 来进行反序列化,得到以前保存的内容,注意要考虑以前未保存内容的 情况,可返回错误信息。 3.在控制台显示一个菜单,并实现相应的功能。菜单如 下: 1显示所有学生信息 2按学号查找 3 按姓名查找 4 按学号删除 5 保存 6 读入 7 退出 请输入数字(1-7):

中山大学学生信息管理系统

中山大学学生信息管理系统 学生用户手册 2012年6月

目录 1 编写目的 (3) 2 操作指南 (3) 2.1系统登录 (3) 2.2 系统主界面 (3) 2.3捐赠奖学金 (4) 2.3.1捐赠奖学金主页面 (4) 2.3.2申请捐赠奖学金 (5) 2.4优秀奖学金 (8) 2.5单项奖 (9) 2.5.1 单项奖主页面 (9) 2.5.2申请单项奖学金 (9) 2.6政府奖学金 (11) 2.6.1 政府奖学金主页面 (11) 2.6.2申请政府奖学金 (12) 2.7消息列表 (14)

1 编写目的 本文档适用读者为学生,用于指导学生使用《中山大学学生信息管理系统》申请捐赠奖学金、优秀学生奖学金、单项奖学金、政府奖学金以及获得各类奖学金的资讯。 2 操作指南 2.1系统登录 在浏览器地址栏中输入学生信息管理系统的地址:https://www.docsj.com/doc/a017731015.html,/sims,回车,出现系统的登录界面。输入正确的用户名称和密码,点击登录按钮即可进入学生信息管理系统。如图2.1所示: 图2.1 系统登陆界面 注:1、系统登录的用户名和密码与校务系统的一致,即用户名为学号,初始密码为身份证后8位。 2、如果用户名及密码填写不正确,将会登录失败,请自行重置校务系统密码(重置方法详见:https://www.docsj.com/doc/a017731015.html,/content/view/663/49/。 2.2 系统主界面 学生信息管理系统主界面分为LOGO区,菜单区、工作区、名字区四部分,如图2.2:

图2.2 系统登录后的主界面 1.Logo 区 Logo 区域显示学校的校徽、名称以及系统的名称。 2.菜单区 菜单区域显示奖学金和公告栏2个大类,单击大类标题,工作区会显示相应的简介。 单击大类右侧的下拉按钮,将打开大类包含的二级分类,分别为:捐赠奖学金、优秀学生奖学金、单项奖、政府奖学金以及消息列表。 单击二级分类的标题,工作区会打开相应的操作界面。 3.工作区 1)系统桌面显示系统信息、用户信息、系统帮助文档和简介。 2)响应用户操作,显示“主菜单区”所选菜单的功能页面。 4.名字区 显示用户真实姓名,以及系统退出按钮。 2.3捐赠奖学金 2.3.1捐赠奖学金主页面 单击菜单栏“捐赠奖学金”,工作区将打开捐赠奖学金主页面,如图2.3.1: 菜单区 Logo 区 工作区 名字区

C简单学生成绩管理系统

C++学生成绩管理系统 要求用C++语言编写学生成绩管理系统,要求能进行添加删除修改输入输出等的操作,并能使用面相对像原理对此系统进行实现。 学生成绩管理系统分析: 学生成绩管理系统分为8个模块,分别是:添加学生信息,输出学生成绩,查找学生成绩,修改学生成绩,删除学生成绩,学生成绩排序,保存数据到文件和读取文件中学生成绩的模块。 学生成绩管理系统结构:

各个子函数功能及其流程: 1.首先定义一个学生类Class Student;并定义其各个私有变量和公有函数 2.Student();构造函数,用于初始化学生类中的各个变量并记录 3.Add();函数:用于添加学生信息的函数包括学号姓名成绩等的内容 4.Output();函数:用于输出学生信息,包括学号姓名各科及总分平均成绩

5.Find();函数:用于查找学生各项信息。 6.modify();函数:用于修改学生各项信息。 7.delete();函数:用于删除学生信息。

8.sort();函数:对学生各项信息进行排序操作。 8.save()和load();函数:将学生信息保存到文件中,并在需要的时候调用该文件将其中 的学生信息显示出来

9.“=”“<<”“>>”符号的重载:在各个函数处理数据过程中对这些的调用处理函数源代码: 此函数源代码在VisualC++6.0环境下编译通过。具体如下: #include"iostream.h" #include"conio.h" #include"iomanip.h" #include"stdio.h" #include"string.h" #include"stdlib.h" #include"fstream.h" class student //定义学生类 { private://定义学生类的私有成员 char name[20]; //名字 char sex[5]; //性别 int number; //学号 int score[3]; //分数 int total; //总分 int average; //平均分 public: //公有成员 student(); //学生构造函数,用于学生数据的初始化及保存学生数据 void add(); //添加学生信息函数 void output(); //输出学生信息函数 void find(); //查找学生数据函数 void modify(); //修改学生信息函数 void deleted(); //删除学生信息函数 void sort(); //排序函数 void save(); //保存学生信息并写入文件函数 void load (); //打开写有学生信息的文件的函数

C语言程序设计第四版第七章答案-谭浩强

第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); }

简单学生信息管理系统

. ——综合性程序设计 题目:简单学生信息管理系统(序列化版)班级: : 学号:

实验目的: 1.综合运用输入、输出的知识,用序列化方法保存、读入数组内容。 2.设计实现一个简单的信息管理系统。 实验内容: 编写能够满足如下条件的程序,分两次四个课时完成 1.声明Student类,该类实现Serializable接口以表明该类可 以进行序列化。该类有姓名、学号、math、os、java用来 存放对应的成绩,在构造方法中进行姓名、学号、课程成 绩的赋值。Override有Object继承来的tostring方法已便 友好格式显示自己的属性; 2.建立一个类,利用数组来存储多个Student,写完一个方法, 在main中写一段测试代码,运行以保证目前所做工作的 正确性,正确后再写其他代码。有以下方法: 1)add(Student stu):增加新的学生,人数满时显示人满或是new一个更长的数组,把现有的Student复制到新 数组 2)dispAll():可以显示所有的学生信息(测试add是否正确) 3)findById(long id):可以按照学号来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。 4)findByName(string name):可以按照姓名来查找,然后显示符合条件的学生信息,查无此人的话显示错误信 息。(判断姓名是否相等使用string类的 equalsIgnoreCase方法) 5)delBy Id(long id): 可以按照id来删除学生信息,然后显示找到该人,若查无此人的话显示错误信息。 6)save():利用ObjectOutputStream 来把数组写入文件中,需要考虑在什么时候调用该方法。 7)load():利用ObjectIntputStream 来进行反序列化,得到以前保存的内容,注意要考虑以前未保存内容的情 况,可返回错误信息。 3.在控制台显示一个菜单,并实现相应的功能。菜单如下: 1显示所有学生信息2按学号查找3 按姓名查找 4 按学号删除 5 保存 6 读入 7 退出 请输入数字(1-7): 程序代码

基于JAVA学生信息管理系统(含源文件)

江西科技师范大学毕业设计(论文) 学生姓名: 题目(中文):基于Java的学生信息管理系统 (外文):Student Information Management System based on Java 院(系):数学与计算机科学学院 专业:计算机科学与技术 年级:学号: 指导教师: 时间:2016 年 4 月 2016年4月20日 目录

1.引言 (1) 1.1 项目开发背景和意义 (1) 1.2 国内外的研究现状 (1) 2.系统主要技术及开发环境介绍 (2) 2.1 Java语言 (2) 2.2 Eclipse简介 (2) 2.3 Mysql概述 (2) 2.4 jsp技术概述 (3) 3.系统需求分析 (3) 3.1功能需求分析 (3) 3.2框架结构设计分析 (4) 3.3用户需求分析 (4) 4.系统概要设计 (5) 4.1系统结构图 (5) 4.2系统主要功能模块设计 (5) 4.3程序流程图 (7) 4.4数据库设计 (8) 4.4.1数据库概念结构设计 (9) 4.4.2数据库逻辑结构设计 (11) 5.系统实现 (13) 5.1登录模块系统实现 (13) 5.2基本信息管理实现 (14) 5.3成绩管理实现 (21) 5.4课程管理实现 (23) 5.5班级管理实现 (26) 6.总结和展望 (28) 6.1总结 (28) 6.2 展望 (29)

参考文献 (29)

基于Java的学生信息管理系统 摘要:基于Java的学生信息管理系统分为五大模块:登录管理、学生基本信息管理、成绩管理、课程管理和班级管理。本文详细介绍了前台界面的操作及后台数据库的链接,根据模块制定各个功能的所需界面的实现方法。该系统具有十分清晰友好的界面,操作界面简洁,便于使用。 关键字:学生信息管理;MYSQL;JA VA 1.引言 1.1 项目开发背景和意义 随着科学技术的快速发展和不断提高,尤其是计算机科学技术的日渐普及,其功能的强大以及运行速度已经被人们深刻地了解。近几年来高校的办学模式多元化和学校规模的扩大,为了实现对学生信息进行科学管理,因此开发一个简单快速规范的平台。学生的信息管理是教务管理的一个至关重要的部分,传统的方法不仅费人力和时间,而且效率低。如学生发生班级调动,传统的方法需要人工及时更改信息,十分复杂,使得该学生信息不能合理地配置。而使用计算机技术对学生档案信息进行管理的优点具有便于查找、检索快速、统计科学、保密性强、管理规范、节约成本等优点。 1.2 国内外的研究现状 学生信息管理工作是各大高校必不可少的管理工作之一,在学校占据重要的地位,它涉及到学生、老师和管理员等多方面。由于各大高校学生人数日益增长,因此研发出一款具有操作灵活且人性化的管理系统成为了迫切需要。 从国外看来许多高校一般是由技术强大稳定的队伍来完成该系统程序的设计与研制,或者是本校的某个院系。在西方电子管理系统的概念早已被学生引入,他们可以通过网络浏览学校的管理系统网站,以及学校的学术信息等。可以查看个人信息、考试成绩和课程,这种方式大大地减轻了人力和时间。 从国内研究现状来看,而国内的起步相对较晚,在信息安全和更新方面尚有欠缺,且建立单独的资料共享性差。随着数字校园理论的逐步应用,各高校不断地开发研制各种办公和教学管理等系统,已经成为了一种全面信息化建设体系。

学生信息管理信息系统

管理信息系统 课程设计报告 专业:电子商务 学号: 姓名: 2011年12 月 29 日

实验内容和评分项目

学生信息管理信息系统的分析与设计 一. 总体规划: 1.系统开发的背景 学生信息档案的管理对于学校的管理者来说至关重要,学生信息是高等学校非常重要的一项数据资源,是一个教育单位不可缺少一部分。特别是近几年来,国家政策的调整,我国高等院校大规模的扩招,给高等院校的教学管理、学生管理、后勤管理等方面都带来不少的冲击。其包含的数据量大,涉及的人员面广,而且需要及时更新,故较为复杂,难以单纯地依人工管理,而且传统的人工管理方式既不易于规范化,管理效率也不高,目前我国各类高等院校中还有相当一部分学生档案管理还停留在纸介质的基础上,尤其是中、小学对学生档案的管理更是落后,这样的管理机制已经不能适应时代发展的要求,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,计算机科学与技术日渐成熟,计算机应用的普及已进入人类社会生活的各个领域,并发挥着越来越重要的作用。这种传统的手工管理模式必然被以计算机为物质基础的信息管理方法所取代。 作为计算机应用的一部分,使用计算机对学生档案进行管理,有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是学校向科学化、正规化管理发展的必要条件,更是各个高等院校与世界接轨的重要条件。 2.系统功能需求 学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管 理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。推行学校信息管理系统的应用是进一步推进学生管理规范化、电子化、控制辍学和提高义务教育水平的重要举措。 学生信息的内容包括: 1. 能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。 2. 能够将指定的信息从文件中删除。 3. 能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。 4. 可以统计全部学生的总成绩,及其在班上的排名。 5. 能够统计各科的平均成绩及及格率。 6. 要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。 7. 如果检索不到相应的信息应提示用户。

c学生信息管理系统

洛阳理工学院 课程设计报告课程名称高级语言C#课程设计 设计题目学生信息管理系统 专业计算机科学与技术 班级 B130506 学号 姓名张葵 完成日期 课程设计任务书 设计题目:学生信息管理系统 教务员可以输入学生、教师、班级、课程信息,一个班级只属于一个专业,一个学生只属于一个班级。教务员负责输入每个专业、每个班级需要学习哪些课程,指定课程的任课教师。一个教师可以教授多个班的多门课程。 教师可以查看学习该课程的学生名单。课程结束后,教师可以录入课程成绩。 课程分两类,必修课和选修课。学生可以选修课程,每学期几门。学生可以查看自己各门课程的成绩。学生还可以进行评教,给老师打分。 系统管理员可以输入教室信息,并结合班级、课程、教室信息实现自动排课。

指导教师:张文学 2015 年 12 月 27 日 课程设计评语成绩: 指导教师:_______________ 2015 年 12 月 31 日

目录

第 1 章需求和可行性分析 需求分析 学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。学校的管理人员可以通过电脑对学生信息进行有效的管理,避免了以往人工管理的复杂和耗时费力的劳动,也大大的能够减少管理人员的工作量,可以有效的节约学校的开支。

功能需求 作为一个学生的信息管理系统,必须要有管理人员能够进行对学生的信息进 行有效的管理,因此,系统必须预留一个管理员的登录窗口和登录之后所能进行的操作,在学生信息管理系统中,管理员具有最高的权限,可以对学生、老师、班级、专业等等进行添加、删除、修改个查询。除了拥有管理员之外,还应该拥有教务处对学生进行管理,例如:对学生课程,成绩等等具有一定的权限。此外,还应该有老师的一个权限,老师在带完一门课之后可以对学生进行一个成绩录入和平时布置作业的功能。最后是学生自己拥有的功能,学生在考试结束后可以利用系统登录自己的账户对成绩进行查询。 在学生信息管理系统中,要明确各类用户所能拥有的最高权限,如果一旦权限的问题搞错以后,整个系统就会变得没有价值。例如:学生只有对成绩的查询功能,而不能对成绩拥有修改和删除以及插入的功能。老师只能够对学生进行成绩的录入和平时布置作业,而不能删除学生的个人信息等权限。 要设立不同的异常机制,这样不会因为用户的错误的操作而使得系统瞬时奔溃。我们要在代码中设置不同的异常抛出机制,这样就可以使得用户在进行了错误的或者违反规则的操作之后,系统不会出现突然的停止运转。 可行性分析 随着计算机语言和数据服务的不断发展,使得许多的现实问题都可以利用计算机来帮助人类实现轻巧,方便的管理。在教育上,学生是一个庞大的群体,因此技术人员早早就开始想办法解决这个问题,因此,目前对于学生信息的管理各种语言都能够编写出一套完整的、可用的学生信息管理系统。 技术可行性 在这套系统的开发中,采用的是开发语言是C#,软件是Visio Studio2010,C#是微软对问题的解决方案。C#是一种最新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft?平台的应用程序,Microsoft .NET提供

大学生C语言程序设计(第四版 谭洪强)实验5答案

实验四参考答案(参考答案) (1) 设计程序sy5-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。 算法分析: 对角线上的元素,1维和2维下标相同,反对角线元素,如果行下标为i,列下标就为2-i; 参考答案: #include int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,sum=0; for(i=0;i<3;i++) sum=sum+a[i][i]+a[i][2-i]; //a[i][i]当前行的主对角线元素 //a[i][2-i]当前行的反对角线元素printf("矩阵的正、反对角线元素之和为:%d\n",sum); return 0; } 运行结果: (2) 设计程序sy5-2.c,找出一个3×4的矩阵中的最小值及其位置。 算法分析: 首先把二维数组中的第一个数即a[0][0]看成最小值,然后逐行逐列的去遍历每个元素,逐一判断每一个元素是否比最小值还好小,如果是,就改写最小值,并记录他的下标。 参考答案: #include #include int main() { int a[3][4]={{10,21,41,5},{12,15,46,35},{40,21,26,30}}; int i,j,row,colum,min; printf("数组a:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%5d",a[i][j]);

printf("\n"); } min=a[0][0];row=0;colum=0; //首先把第一个数a[0][0]看成最小数 for(i=0;i<3;i++) //双重循环逐一遍历每个元素a[i][j] for(j=0;j<4;j++) if(min>a[i][j]) //如果当前值a[i][j]比最小值还要小 {min=a[i][j];row=i;colum=j;} //用a[i][j]改写最小值,并记下他们的下标printf("矩阵中最小元素是:%d,行下标是:%d,列下标是%d\n",min,row,colum); return 0; } 运行结果: (3) 设计程序sy5-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。然后输入一个整数n,使数组左下三角(含对角线元素)元素中的值乘以n 。例如:若n的值为3,a 数组中的值为 | 1 9 7 |则程序运行后a数组中的值应为| 3 9 7 | | 2 3 8 | | 6 9 8 | | 4 5 6 | | 12 15 18 | 算法分析: 主要理解到对角线即以下元素包含哪些元素,即他们的下标变化。对每一行i来说,对角线以下的元素,他们的列下标是0,1,2,---,i;所以用外循环i遍历行,内循环j(从0到i),逐一遍历每一个a[i][j],并给a[i][j]赋值为他的n倍。最后输出矩阵。 参考答案: #include #include int main() { int a[3][3]; int i,j,n; printf("原来a的值:"); for(i=0;i<3;i++) //生成数组元素,并按矩阵形式输出 { for(j=0;j<3;j++) {a[i][j]=rand()%20; //rand()参看教材385页 //rand()%20 产生一个20以内的整数

相关文档
相关文档 最新文档