学生信息管理系统课程设计报告

数据库课程设计报告

学生信息管理系统课程设计报告

指导老师: 贺亚茹 组名:组长:组员: 完成日期: 成绩:

数据库课程设计报告

一、项目名称:学生信息管理系统

二、项目需求分析

1、项目需求分析简介

本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。

1. 信息需求

(1)学生个人基本信息:学号、姓名、性别、年龄、院系、专业、班级、联系方式。

(2)学生选课信息:学号、课程号、课程名。

(3)学生成绩信息:学号、课程号、单科成绩、总成绩、总学分、平均成绩等。

(4)本学期开设课程信息:课程号、课程名、课程性质、学分、课时。

(5)用户登录信息:用户名、密码、登录权限 。

2.功能需求

(1)验证用户输入的登录信息。用户只有输入正确的登录信息后,才能进入本数据库系统。

(2)学生查询个人信息功能。学生选择该功能后,可以选择查询个人基本信息。

(3)学生修改密码的功能。学生选择该功能后,只要按规定格式输入密码后,就可以获得新的密码。

(4)学生选课功能。学生选择此功能后,可以先查看已有的选课记录。如果已有选课信息,若不满意,可以退选,再重新选择课程。若选择的课程总数达不到所要求的数目,可以继续选择。

(5)学生查询个人成绩的功能。选择该功能后,可以按不同的方式查询成绩(如按学期、按学年或查询最高成绩),获得成绩后可继续选择打印功能。

3.系统需求

(1)本系统只有输入正确的用户名和密码,选择正确的权限,才能进入系统。

(2)学生只能查询自己的个人信息和成绩信息而不能修改或删除。

2、数据流图

学生信息管理系统课程设计报告

3、数据字典

数据项

1. 数据项:学号

含义说明:唯一识别学生的号码 别名:学生证号 类型:字符型 长度:10

取值范围:0000000000—9999999999

取值含义:前四位表示班级号、中间四位表示专业代码、后两位表示学生编号 与其他数据项的逻辑关系:标识项 2. 数据项:姓名

含义说明:学生的名称 类型:字符型 长度:10

取值范围:所有汉字 3. 数据项:性别

含义说明:识别学生性别 类型:字符型 长度:2

取值范围:男、女

4. 数据项:年龄

类型:整型

取值范围:18 — 24

5. 数据项:院系名称

含义说明:表示该生所在的院系

类型:字符型

长度:30

6. 数据项:专业名称

含义说明:该表该生所在的专业

类型:字符型

长度:20

7. 数据项:班级编号

含义说明:该表该生所在的班级

类型:字符型

长度:4

取值范围:0000 —9999

取值含义:前两位表示年级号、后两位表示班级号

8. 数据项:联系电话

别名:联系方式

含义说明:该生在校期间的联系方式

类型:字符型

长度:11

取值范围:移动、联通、电信号码

9. 数据项:课程号

含义说明:唯一识别课程的号码

类型:字符型

长度:4

取值范围:0000—9999

取值含义:前两位表示年级,后两位表示课程号 与其他数据项的逻辑关系:标识项

10.数据项:课程名

含义说明:表示所开课程的名字

类型:字符型

长度:20

取值范围:汉字或字符

11.数据项:课程性质

含义说明:表示该课程的重要性和选课方式 类型:字符型

长度:6

取值范围:基础课、专业课、必修课、选修课

12.数据项:学分

含义说明:所学课程可得学分数

类型:整型

长度:1

取值范围:1—6

13.数据项:课程学时

含义说明:此课程所需要的学习时间

类型:整型

长度:3

取值范围:4 —120

14.数据项:成绩

类型:整型

长度:3

取值范围:0 — 100

15.数据项:用户名

含义说明:用户登录系统时使用的名字

类型:字符型

长度:10

取值范围:字符、数字、汉字

16.数据项:密码

含义说明:用户登录系统时进行身份验证时使用的密码

类型:字符型

长度:6

取值范围:字符、数字

17.数据项:登录权限

含义说明:表明用户登录系统时的身份

类型:字符

长度:6

取值范围:学生、教师、管理员

数据结构

1 .数据结构:学生

含义说明:是学生信息管理系统的主要数据结构,定义了一个学生的有关信息 组成:学号、姓名、性别、年龄、院系、班级、联系方式

2 .数据结构:课程

含义说明:是学生信息管理系统的主要数据结构,定义了有关课程的信息

组成:课程名、课程号、 课程性质、课程学分、课程学时

3. 数据结构:成绩

含义说明:是学生信息管理系统的主要数据结构,定义了有关学生选课以及获得相应成

绩的信息

组成:学号、课程号、单科成绩、学分、总成绩、平均成绩

数据流

1.数据流:登录信息

说明:用户学生用来登录学籍系统的用户个人信息

数据流来源:学生

数据流去向:用户信息认证

组成:用户名,密码,登录权限

2.数据流:个人信息查询结果

说明:学生查看个人信息后得到的结果

数据流来源:查询个人信息

数据流去向:学生

组成:学号、姓名、性别、年龄、院系、专业、班级

3.数据流:课程查询结果

说明:学生查看课程信息后得到的结果

数据流来源:查询课程

数据流去向:选课或退选

组成:课程号、课程名、课程性质、学分、课时

4.数据流:选课结果

说明:学生选课后的结果

数据流来源:选课

数据流去向:提交

组成:课程号、课程名、课程性质、学分、课时

5.数据流:个人成绩信息结果

说明:学生对个人成绩信息进行查询后的结果 数据流来源:查询成绩

数据流去向:学生或打印

组成:学号、课程名、成绩

数据存储

1.数据存储:学生个人信息数据

说明:记录所有学生的个人信息资料库

流入数据流:相关工作人员输入

流出数据流:学生查询个人信息

数据量:由信息详细情况而定

存取方式:随机存取

2.数据存储:学生课程数据

说明:记录学生的所有已选课记录信息

流入数据流:学生选课

流出数据流:学生查询课程信息

数据量:由学生选课次数决定

存取方式:随机存取

3.数据存储:本学期开设的课程数据

说明:学校提供给学生的所有课程信息

流入数据流:相关工作人员输入

流出数据流:学生查询所选课程信息

数据量:由可选课程多少决定

存取方式:随机存取

4.数据存储:学生成绩数据

说明:学生已修课程的所有考试成绩信息 流入数据流:代课老师输入

流出数据流:学生查询成绩

数据量:由学生所选课程多少决定

存取方式:随机存取

5.数据存储:用户登录信息数据

说明:用户的登录信息

流入数据流:管理员输入或用户修改密码

流出数据流:验证用户信息

数据量:由学生所选课程多少决定

存取方式:随机存取

处理过程

1.处理过程:查询个人信息

说明:学生获得所查个人信息

输入:选择查询个人信息功能

输出:查询结果

处理:学生进入系统后,选择查询个人信息功能,获得相应信息

2.处理过程:修改密码

说明:修改原始密码

输入:新的密码

处理:进入系统后,选择修改密码功能,输入新的密码后,提示成功后返回到主界面

3.处理过程:查看课程信息

说明:选择查看课程信息后得到相应信息

输入:选择查询课程信息功能

输出:相应的课程信息

处理:进入系统后,选择选课中查看已选课程功能,查询课程信息,得到相应的信息

4.处理过程:选课

说明:选课成功后新增一门课程

输入:选课功能选择

输出:相应的选课结果

处理:进入系统后,选择选课功能,开始选课,然后可以继续选择或退选

5.处理过程:查询成绩

说明:查询成绩后得到的成绩信息

输入:选择查询成绩功能

输出:查询后的结果

处理:进入系统后,选择查询成绩功能,并选择查询方式,得到相应的成绩信息。

三、数据库概念设计结果

学生信息管理系统课程设计报告

学生信息管理系统课程设计报告

学生信息管理系统课程设计报告

学生信息管理系统课程设计报告

四、数据库逻辑设计结果

个人基本信息记录(学号,姓名,性别,年龄,专业,班级, 院系,联系方式) 已选课程记录(学号,课程号)

本学期开设课程记录(课程号,课程名,课程性质,学分,课时,学号) 个人成绩记录(学号,课程号,姓名,成绩) 用户登录信息(用户名,密码,登录权限,学号)

个人基本信息表(Student)

个人已选课程记录表(Scourse)

可供选择课程表(Choosing_course)

学生信息管理系统课程设计报告

成绩记录表(Sgrade)

用户登录信息表(Users)

学生信息管理系统课程设计报告

五、数据库物理设计结果

创建数据库

create database student_information on

primary

(name=student_data1,

filename='d:\student\student_data1.mdf', size=10,

maxsize=unlimited, filegrowth=1 ),

(name=student_data2,

filename='d:\student\student_data2.ndf', size=10,

maxsize=unlimited, filegrowth=1 )

log on

(name=student_data3,

filename='d:\student\student_data3.ldf', size=10,

maxsize=unlimited,

学生信息管理系统课程设计报告

filegrowth=1

)

创建数据表(同时创建关系完整性)

use student_information

create table Student(

sno char(10) constraint pk1 primary key,

sname varchar(10) not null,

ssex char(2) constraint ck1 check(ssex in('男','女')) not null, sage tinyint constraint ck2 check(sage between 18 and 24), sdept varchar(30),

smajor varchar(20),

sclass char(4),

tel char(11)

)

create table Users(

username char(10),

code char(6),

limit varchar(6) constraint ck3 check(limit in('学生','教师','管理员')), sno char(10) not null,

constraint pk2 primary key(username,code,limit),

constraint fk1 foreign key(sno) references Student(sno) )

create table Sgrade(

sno char(10),

cno char(4),

sname varchar(10) not null,

grade tinyint constraint ck4 check(grade between 0 and 100), constraint pk3 primary key(sno,cno),

constraint fk2 foreign key(sno) references Student(sno) )

create table Scourse(

sno char(10),

cno char(4),

constraint pk4 primary key(sno,cno),

constraint fk3 foreign key(sno) references Student(sno) )

create table Choosing_course(

cno char(4) constraint pk5 primary key,

cname varchar(20) not null,

cnature char(6) constraint ck5 check(cnature in('基础课','专业课','必修课','选修课')),

ctime tinyint constraint ck6 check(ctime between 4 and 120),

ccredit tinyint constraint ck7 check(ccredit between 1 and 6),

sno char(10) not null,

constraint fk4 foreign key(sno) references Student(sno)

)

创建外模式(即视图)

create view v_student(学号,姓名,性别,年龄)

as

select sno,sname,ssex,sage

from student

create view v_sgrade (姓名,课程名,成绩)

as

select sname,cname,grade

from Sgrade,Choosing_course

where sgrade.sno=choosing_course.sno

create view v_scourse(学号,课程名,学分)

as

select scourse.sno,cname,ccredit

from Scourse,Choosing_course

where scourse.sno=choosing_course.sno

create view v_choosing_course(课程号,课程名,课程性质,课时,学分)

as

select cno,cname,cnature,ctime,ccredit

from choosing_course

六. 设计人员

组长:孙诚

组员:雒婷婷 孙艳 王帆

分工:在这一次的课程设计报告中,每一个阶段的设计思路都是经过我们四个组员共同讨论

和反复修改得出来的,我们组的四个组员具体分工如下:

1. 组长主要负责组织大家进行讨论,并给每个人员分配任务。并在每个阶段的最后将

每个人做出的结果进行综合整理并修改,最后得出统一的结果。

2. 王帆主要负责的是画图的工作,如在需求分析阶段的数据流图和概念结构设计阶段

的E—R图。

3.孙艳主要负责的是文档编辑方面的工作,如数据字典、需求分析报告以及最后的课

程设计报告,并负责制作PPT。

4. 雒婷婷主要负责逻辑结构设计和物理结构设计这一部分的工作。

七.总结体会

1.在这次的数据库课程设计中,我们组在每个阶段都能够较快并圆满地完成任务,主要源于我们四个组员能够积极主动地团结合作,在课上大家共同讨论定下思路后,组员带着各自的任务课下通常还会花一定的时间来完成任务。通过这次的课程设计,我们每个人都意识到了团结合作的重要性,尤其是当大家意见不一的时候,大家要共同讨论、协商解决问题,而不是各执己见。

2.通过这次的课程设计,我们把平时学到的数据库理论知识运用到实践中,对数据库方面的理论知识理解的更透彻,同时对常用画图软件、文档编辑、制做PPT方面的知识也掌握得更加熟练。

 

第二篇:C课程设计报告(学生信息管理系统)

C课程设计报告(学生信息管理系统)

目录

一、题目总体介绍... 4

二、需求分析... 5

三、总体设计... 6

1、现行系统组织结构图:... 6

2、数据结构分析... 6

3、工作原理等... 6

三、详细设计... 6

四.系统调试与结果分析... 19

六、总结... 22

七、附件... 22

参考文献... 23

一、题目总体介绍

(一)、课程设计题目

学生信息管理

(二)、课程设计内容与主要功能:

设计与开发一个学生信息管理系统,对学生的学号、姓名、性别、年龄等基本信息进行管理、主要功能如下:

   1).输入记录

   2).显示全部记录

   3).查找记录

   4).删除记录

   5).插入记录

   6).保存文件

   7).读文件

   8).按学号显示记录

   9).按姓名排序

 

(三)、目的与要求:

1、目的:

(1)要求学生达到熟练掌握C语言的基本知识和技能;

(2)基本掌握C语言程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的C语言程序设计问题。

2、基本要求:

1)设计正确,方案合理。

2)界面友好,使用方便。

3)程序精炼,结构清晰。

3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。

4、写出设计说明书

(四)、设计方法和基本原理:

1、问题描述(功能要求):

(1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。

(2)能够将指定的信息从文件中删除。

(3)能够按学号、姓名、性别、年龄对学生的信息进行检索并将检索结果显示在屏幕上。

(4)如果检索不到相应的信息应提示用户。

2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤:

(1)写出需求分析(做什么);

(2)分析系统中的各个实体之间的关系及其属性和行为;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述(包括属性和方法);

(5)完成类中各个成员函数的定义;

(6)用户界面的设计;

(7)分析系统功能模块(系统流程图);

(8)代码编写,功能调试;

(9)完成系统总结报告以及系统使用说明书。

 

二、需求分析

(1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。

(2)能够将指定的信息从文件中删除。

(3)能够按学号、姓名、性别、年龄对学生的信息进行检索并将检索结果显示在屏幕上。

(7)如果检索不到相应的信息应提示用户。

三、总体设计

1、现行系统组织结构图:

C课程设计报告(学生信息管理系统)

2、数据结构分析

使用整型,双精度,字符型定义变量和函数。使用结构体,类等概念实现数据存储。同时也是用这些自定义类型定义了变量和函数。体现面向对象设计的特点。

3、工作原理等

系统功能结构图:

C课程设计报告(学生信息管理系统)

四、详细设计

1、类设计

类:student

数据成员

学号,姓名,性别,年龄

类:school

成员函数

输入记录函数enter ():输入编号到计算机中;

显示记录函数list():显示全部输入的内容,如学号、姓名、性别、年龄等;

按姓名查找显示记录函数search ():按学号或姓名查找学生的信息;

删除记录函数delete():删除指定学号学生信息;

插入记录函数add():插入指定学号学生信息;

记录保存为文件函数save():将学生信息保存为文件函数;

从文件中读记录函数load():从文件中读出学生信息;

按序号查找显示记录函数display():按序号查找学生信息;

按姓名排序函数sort():按学生姓名排序;

文件复制函数copy():将文件复制;

显示单条记录函数print(STUDENTS temp);显示单条学生信息;

查找函数find(STUDENTS t[],int n,char *s):查找学生信息;

输出函数menu_select():输出学生信息;

五.系统调试与结果分析

1、初始目录:

2、输入数据

3、显示所有记录

4、查找记录

5、删除记录

6、插入记录

7、按姓名排序

8、复制信息

9、按序号排序

2.系统运行的结果:

  设计特点和不足之处:

系统整体清晰明了,功能基本齐全,但系统中报错功能不完整,当学号等信息输入数字等时不出现报错,可设置提醒重新输入。

六、总结

1、在做了课程实验以后,我对C语言的了解更深了,很多知识得到了巩

固,一些不懂的知识也渐渐明了!但从C语言这门课程开始,已发现程序

设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计

算机的机体也有了一个大体的了解

2、作了学生学生信息管理系统程序后,我对数据类型、函数、指针、结

构体更加熟悉了,作为C语言所特有得指针、结构体和对象再编写程

序得过程中运用十分广泛,我还必须多加练习才能达到一个更高的水

平,结构体和对象、指针都是非常重要的。

3、这次实训是彭祯老师给了很大引导,经过自己的改写,实现要

求。先做简单的输出,一步步的再做其它图案,在实际操作过程中犯

的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对

这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也

发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语

言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的

重要作用,特别是对数组和循环有了深刻的理解。

4、在完完整整的做完一个课程实验后,我对程序的整体性有了一个明确

的认识,做一个程序必须要注意程序前后的联系,要具有清晰的思路,

程序要具有层次。对整体性的把握至关重要!

5、学习计算机语言,最重要的就是上机操作,我深感自己动手能力比较

差,在以后的学习中,还必须多多上机调试程序,从实践中多积累经

验,为以后学习和工作打下坚实的基础。

七、附件

/******头文件(.h)***********/

#include    /*I/O函数*/

#include /*标准库函数*/

#include /*字符串函数*/

#include /*字符操作函数*/

#define M 50  /*定义常数表示记录数*/

typedef struct /*定义数据结构*/

{

   char no[20];/*学号*/

   char name[20]; /*姓名*/

   char sex[5];/*性别*/

   int  age;/*年龄*/

}STUDENTS;

/******以下是函数原型*******/

int enter(STUDENTS t[]); /*输入记录*/

void list(STUDENTS t[],int n); /*显示记录*/

void search(STUDENTS t[],int n); /*按姓名查找显示记录*/

int delete(STUDENTS t[],int n); /*删除记录*/

int  add(STUDENTS t[],int n); /*插入记录*/

void save(STUDENTS t[],int n); /*记录保存为文件*/

int load(STUDENTS t[]);  /*从文件中读记录*/

void display(STUDENTS t[]); /*按序号查找显示记录*/

void sort(STUDENTS t[],int n); /*按姓名排序*/

void copy();  /*文件复制*/

void print(STUDENTS temp); /*显示单条记录*/

int find(STUDENTS t[],int n,char *s) ; /*查找函数*/

int menu_select();  /*主菜单函数*/

/******主函数开始*******/

main()

{

  

   STUDENTS stu[M];  /*定义结构体数组*/

   int length;  /*保存记录长度*/

   clrscr();  /*清屏*/

   for(;;)/*无限循环*/

   {

      switch(menu_select())   /*调用主菜单函数,返回值整数作开关语句的条件*/

      {

         case 0:length=enter(stu);break;/*输入记录*/

         case 1:list(stu,length);break; /*显示全部记录*/

         case 2:search(stu,length);break; /*查找记录*/

         case 3:length=delete(stu,length);break; /*删除记录*/

         case 4:length=add(stu,length);  break;   /*插入记录*/

         case 5:save(stu,length);break; /*保存文件*/

         case 6:length=load(stu); break; /*读文件*/

         case 7:display(stu);break;  /*按序号显示记录*/

         case 8:sort(stu,length);break; /*按姓名排序*/

         case 9:copy();break; /*复制文件*/

         case 10:exit(0); /*如返回值为11则程序结束*/

      }

   }

}

/*菜单函数,函数返回值为整数,代表所选的菜单项*/

menu_select()

{

   char s[80];

   int c;

   gotoxy(1,25);/*将光标定为在第25行,第1列*/

   printf("press any key enter menu......\n");/*提示压任意键继续*/

   getch(); /*读入任意字符*/

   clrscr(); /*清屏*/

   gotoxy(1,1);

   printf("********************MENU*********************\n\n");

   printf("             0. Enter record\n");

   printf("             1. List the file\n");

   printf("             2. Search record on name\n");

   printf("             3. Delete a record\n");

   printf("             4. add record \n");

   printf("             5. Save the file\n");

   printf("             6. Load the file\n");

   printf("             7. display record on order\n");

   printf("             8. sort to make new file\n");

   printf("             9. copy the file to new file\n");

   printf("             10. Quit\n");

   printf("***********************************************\n");

   do{

      printf("\n         Enter you choice(0~10):"); /*提示输入选项*/

      scanf("%s",s); /*输入选择项*/

      c=atoi(s); /*将输入的字符串转化为整型数*/

   }while(c<0||c>10); /*选择项不在0~11之间重输*/

   return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/

int  enter(STUDENTS t[])

{

   int i,n;

   char *s;

   clrscr(); /*清屏*/

   printf("\nplease input num \n"); /*提示信息*/

   scanf("%d",&n); /*输入记录数*/

   printf("please input record \n"); /*提示输入记录*/

   printf("no            name            sex            age\n");

   printf("------------------------------------------------\n");

        for (i=0;i

        {

                scanf("%s",t[i].no);

                scanf("%s",t[i].name);

                scanf("%s",t[i].sex);

                scanf("%d",&t[i].age);

        }

         return n;  /*返回记录条数*/

}

/*显示记录,参数为记录数组和记录条数*/

void list(STUDENTS t[],int n)

{

   int i;

   clrscr();

   printf("\n\n*******************STUDENTS******************\n");

   printf("no            name            sex            age\n");

   printf("------------------------------------------------\n");

   for(i=0;i

   printf("%-20s%-20s%-10s%-10d\n",t[i].no,t[i].name,t[i].sex,t[i].age);

   if((i+1)%10==0)   /*判断输出是否达到10条记录*/

   {

      printf("Press any key continue...\n"); /*提示信息*/

      getch();  /*压任意键继续*/

   }

   printf("************************end*******************\n");

}

/*查找记录*/

void search(STUDENTS t[],int n)

{

   char s[20];   /*保存待查找姓名字符串*/

   int i;   /*保存查找到结点的序号*/

   clrscr();   /*清屏*/

   printf("please search name\n");

   scanf("%s",s); /*输入待查找姓名*/

   i=find(t,n,s); /*调用find函数,得到一个整数*/

   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/

      printf("not found\n");

   else

      print(t[i]);  /*找到,调用显示函数显示记录*/

}

/*显示指定的一条记录*/

void print(STUDENTS temp)

{

   clrscr();

   printf("\n\n********************************************\n");

   printf("no            name            sex            age\n");

   printf("------------------------------------------------\n");

   printf("%-20s%-20s%-10s%-10d\n",temp.no,temp.name,temp.sex,temp.age);

   printf("**********************end***********************\n");

}

/*查找函数,参数为记录数组和记录条数以及姓名s */

int find(STUDENTS t[],int n,char *s)

{

   int i;

   for(i=0;i

   {

      if(strcmp(s,t[i].name)==0)/*记录中的姓名和待比较的姓名是否相等*/

      return i;   /*相等,则返回该记录的下标号,程序提前结结束*/

   }

   return i;  /*返回i值*/

}

/*删除函数,参数为记录数组和记录条数*/

int delete(STUDENTS t[],int n)

{

   char s[20];  /*要删除记录的姓名*/

   int ch=0;

   int i,j;

   printf("please deleted name\n"); /*提示信息*/

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

   i=find(t,n,s); /*调用find函数*/

   for(;i

   {

        strcpy(t[i].name,t[i+1].name);

          strcpy(t[i].no,t[i+1].no);

                  strcpy(t[i].sex,t[i+1].sex);

              t[i].age=t[i+1].age;              

   }

   n--;

   return n;  /*返回记录数*/

}

/*插入记录函数,参数为结构体数组和记录数*/

int add(STUDENTS t[],int n)/*插入函数,参数为结构体数组和记录数*/

{

   STUDENTS temp;  /*新插入记录信息*/

   int i,j;

   char s[20]; /*确定插入在哪个记录之前*/

   printf("please input record\n");

   printf("************************************************\n");

   printf("no            name            sex            age\n");

   printf("--------------------------------------------------\n");

   scanf("%s%s%s%d",temp.no,temp.name,temp.sex,&temp.age); /*输入插入信息*/

   printf("------------------------------------------------\n");

   printf("please input locate name \n");

   scanf("%s",s); /*输入插入位置的姓名*/

   i=find(t,n,s);  /*调用find,确定插入位置*/

   for(j=n-1;j>=i;j--)   /*从最后一个结点开始向后移动一条*/

   {

      strcpy(t[j+1].no,t[j].no); /*当前记录的学号拷贝到后一条*/

          strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/

      strcpy(t[j+1].sex,t[j].sex); /*当前记录的性别拷贝到后一条*/

      t[j+1].age=t[j].age; /*当前记录的年龄拷贝到后一条*/

   }

   strcpy(t[i].no,temp.no); /*将新插入记录的学号拷贝到第i个位置*/

   strcpy(t[i].name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/

   strcpy(t[i].sex,temp.sex); /*将新插入记录的性别拷贝到第i个位置*/

   t[i].age = temp.age; /*将新插入记录的年龄拷贝到第i个位置*/

   n++;   /*记录数加1*/

   return n; /*返回记录数*/

}

/*保存函数,参数为结构体数组和记录数*/

void save(STUDENTS t[],int n)

{

   int i;

   FILE *fp;  /*指向文件的指针*/

   if((fp=fopen("record.txt","wb"))==NULL)  /*打开文件,并判断打开是否正常*/

   {

      printf("can not open file\n");/*没打开*/

      exit(1);  /*退出*/

   }

   printf("\nSaving file\n"); /*输出提示信息*/

   fprintf(fp,"%d",n);  /*将记录数写入文件*/

   fprintf(fp,"\r\n");  /*将换行符号写入文件*/

   for(i=0;i

   {

      fprintf(fp,"%-20s%-30s%-10s%-10d",t[i].no,t[i].name,t[i].sex,t[i].age);/*格式写入记录*/

      fprintf(fp,"\r\n"); /*将换行符号写入文件*/

   }

   fclose(fp);/*关闭文件*/

   printf("****save success***\n"); /*显示保存成功*/

}

/*读入函数,参数为结构体数组*/

int load(STUDENTS t[])

{

   int i,n;

   FILE *fp; /*指向文件的指针*/

   if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/

   {

      printf("can not open file\n");  /*不能打开*/

      exit(1);  /*退出*/

   }

   fscanf(fp,"%d",&n); /*读入记录数*/

   for(i=0;i

      fscanf(fp,"%20s%30s%10s%10d",t[i].no,t[i].name,t[i].sex,&t[i].age); /*按格式读入记录*/

   fclose(fp);  /*关闭文件*/

   printf("You have success read data from file!!!\n"); /*显示保存成功*/

   return n; /*返回记录数*/

}

/*按序号显示记录函数*/

void display(STUDENTS t[])

{

   int id,n;

   FILE *fp; /*指向文件的指针*/

   if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/

   {

      printf("can not open file\n"); /*不能打开文件*/

      exit(1);  /*退出*/

   }

   printf("Enter order number...\n"); /*显示信息*/

   scanf("%d",&id);  /*输入序号*/

   fscanf(fp,"%d",&n); /*从文件读入记录数*/

   if(id>=0&&id

   {

      fseek(fp,(id-1)*sizeof(STUDENTS),1); /*移动文件指针到该记录位置*/

      print(t[id]); /*调用输出函数显示该记录*/

      printf("\r\n");

   }

   else

      printf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/

   fclose(fp);  /*关闭文件*/

}

/*排序函数,参数为结构体数组和记录数*/

void sort(STUDENTS t[],int n)

{

   int i,j,flag;

   STUDENTS temp; /*临时变量做交换数据用*/

   for(i=0;i

   {

      flag=0;  /*设标志判断是否发生过交换*/

      for(j=0;j

      if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/

      {

           temp=t[j]; t[j]=t[j+1];t[j+1]=temp;

          flag++;

      }

      if(flag==0)break;  /*如果标志为0,说明没有发生过交换循环结束*/

   }

   printf("sort sucess!!!\n"); /*显示排序成功*/

}

/*复制文件*/

void copy()

{

   char outfile[20]; /*目标文件名*/

   int i,n;

   STUDENTS temp[M];  /*定义临时变量*/

   FILE *sfp,*tfp; /*定义指向文件的指针*/

   clrscr();/*清屏*/

   if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/

   {

      printf("can not open file\n"); /*显示不能打开文件信息*/

      exit(1); /*退出*/

   }

   printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/

   scanf("%s",outfile); /*输入目标文件名*/

   if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/

   {

      printf("can not open file\n"); /*显示不能打开文件信息*/

      exit(1); /*退出*/

   }

   fscanf(sfp,"%d",&n); /*读出文件记录数*/

   fprintf(tfp,"%d",n);/*写入目标文件数*/

   fprintf(tfp,"\r\n"); /*写入换行符*/

   for(i=0;i

   {

      fscanf(sfp,"%20s%30s%10s%10d\n",temp[i].no,temp[i].name,temp[i].sex,&temp[i].age); /*读入记录*/

      fprintf(tfp,"%-20s%-30s%-10s%-10d\n",temp[i].no,temp[i].name,temp[i].sex,temp[i].age); /*写入记录*/

      fprintf(tfp,"\r\n"); /*写入换行符*/

   }

   fclose(sfp); /*关闭源文件*/

   fclose(tfp); /*关闭目标文件*/

   printf("you have success copy  file!!!\n"); /*显示复制成功*/

 }

参考文献

[1]贾宗璞 许合利《C语言程序设计》,人民邮电出版社,20##年9月出版

[2]谭浩强编,《C程序设计》,清华大学出版社,20##年7月出版

应用技术学院课程设计评分表

课程名称:  学生信息管理 

                                                    教师签名:            

                                              日    期:            

 

相关推荐