
c语言课程设计报告学生信息管理系统.doc
14页题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计学生信息管理系统具体要求如下:◆ 建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆ 能够提供添加、删除和修改学生信息等功能;◆ 能将通讯录保存在文件中;◆ 能够按指定方式输出学生信息系统功能需求分析:★ 1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;★ 2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化这其中要用到对链表的删除、插入等知识删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾插入时也要先找到相应结点,再添加★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中★4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息二、概要设计系统总体设计框架: 对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。
从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中系统功能模块图: 主菜单学生形象查询学生信息添加学生信息删除学生信息添加是否保存 关闭文件三、详细设计主要功能模块的算法设计思路如下:1、查询通讯录信息(void chakan())(1)为开辟一个新单元(2)输入查询关键字:(3)读取保存的文件数据输入ASCLL字符:(4)在链表中寻找相应结点;(5)调用输出函数,输出结点信息2、添加信息函数(void add())(1)定义指向结构体变量的指针;(2)移动指针,找到插入结点;(3)在要插入的结点输入信息;(4)调用保存函数,打开文件,保存输入信息3、删除信息函数(void del())(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找要删除的结点;(4)修改链表,删除对应结点4、修改信息函数(void xiugai())(1)定义指向结构体变量的指针;(2)读取保存的文件数据输入ASCLL字符:(3)用指针检验链表中是否有记录,若没记录,返回主函数;(4)根据要修改的编号查找对应结点;(5)修改信息;(6)打开文件,保存修改记录。
5、保存信息函数(baocun())(1)定义指向结构体变量的指针;(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:(3)用指针检验链表中是否有记录,若没记录,返回主函数:(4)打开文件,保存记录:6、屏幕操作函数(void stubent187())(1)以一定格式输出所想要的图形:四、主要源程序代码定义变量:(对整个程序定义全局变量)#include "stdio.h"#include "conio.h" #define STUDENT ID /*所有STUDENT都用ID来代替*/ typedef struct node /*定义结构体*/ { char ming[50]; /*名字*/ char xing[50]; /*性别*/ char nian[50]; /*年龄*/ int xuehao; /*学号*/ char xibie[50]; /*专业*/ char sushe[50]; /*宿舍号*/ char jia[50]; /*家庭地址*/ struct node *next; }ID; /*学生信息(变量名)*/ ID *head=NULL; /*定义一个头指针*/FILE *zhi; /*定义一个文件指针*/主菜单界面:(进入屏幕界面的形式)void stubent187() /*屏幕格式函数*/ { printf("****************************************\n"); printf("* 学生信息管理系统 *\n"); printf("* *\n"); printf("* 请选择:1:查看; 2:添加; 3:删除; *\n"); printf("* 4:修改; 0:退出系统 *\n"); printf("* *\n"); printf("*******************************************\n"); printf(">>>>>>>>>>>>>输入 0~4 数字<<<<<<<<<<<<<\n"); return ; }查看学生信息记录:(对以保存在磁盘文件的学生信息进行查询)void chakan() { /* 查看*/ ID *t; t=head; t=(ID *)malloc(sizeof(ID)); /*为t开辟一个新单元*/ if((zhi=fopen("yihu1.txt","rb"))==NULL) printf("没有此文件\n"); else { printf("%10s%10s%10s%10s%10s%10s%10s\n","ming","xing","nian","xuehao","eng","sushe","jia"); /*输出一个屏幕格式*/ while (!feof(zhi)) { fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia); /*读取保存的文件数据输入ASCLL字符:*/ printf("%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia); /*以这形式输出各个学生信息*/ t->next=(ID *)malloc(sizeof(ID));t=t->next; } }; }添加学生信息记录:()void add() { char i; /*添加*/ ID *t1,*t2; t1=t2=NULL; loop: t1=(ID *)malloc(sizeof(ID)); /*为t1开辟一个新单元*/ printf("请输入姓名:");scanf("%s",&t1->ming); /* 姓名 */ printf("请输入性别:");scanf("%s",&t1->xing); /* 性别 */ printf("请输入年龄:");scanf("%s",&(t1->nian)); /* 年龄 */ printf("请输入学号:");scanf("%d",&(t1->xuehao)); /* 学号 */ printf("请输入系别:");scanf("%s",&(t1->xibie)); /*系别*/ printf("请输入宿舍号:");scanf("%s",&(t1->sushe)); /*宿舍号*/ printf("请输入家庭地址:");scanf("%s",&(t1->jia)); /*家庭地址*/ t1->next=NULL; if (head==NULL) /*如果头结点为空*/ { head=t1; /*t1指向头结点*/ t2=t1; } else { t2=head; while (t2->next!=NULL) t2=t2->next; /*没有成立则指向下个结点*/ t2->next=t1; } getchar(); printf("是否继续添加(Y/N):\n"); scanf("%s",&i); /*输入Y/N*/ if(i=='y'||i=='Y') {clrscr(); goto loop; /* 清屏 在 循环*/ } else {printf("是否保存此次添加(Y/N)\n");scanf("%s",&i); if(i=='y'||i=='Y') /*是否要保存*/ {baocun(); /*调用保存*/ clrscr(); /*清屏*/ stubent187();/*调用屏幕函数*/ printf("保存成功"); } else if(i=='n'||i=='N') { clrscr(); /*清屏*/ stubent187();} /。
