c语言课程设计报告学生信息管理系统.docx

上传人:b****8 文档编号:30519527 上传时间:2023-08-16 格式:DOCX 页数:19 大小:36.81KB
下载 相关 举报
c语言课程设计报告学生信息管理系统.docx_第1页
第1页 / 共19页
c语言课程设计报告学生信息管理系统.docx_第2页
第2页 / 共19页
c语言课程设计报告学生信息管理系统.docx_第3页
第3页 / 共19页
c语言课程设计报告学生信息管理系统.docx_第4页
第4页 / 共19页
c语言课程设计报告学生信息管理系统.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

c语言课程设计报告学生信息管理系统.docx

《c语言课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告学生信息管理系统.docx(19页珍藏版)》请在冰豆网上搜索。

c语言课程设计报告学生信息管理系统.docx

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

题目:

学生信息管理系统

一、需求分析

任务要求:

自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。

具体要求如下:

◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;

◆能够提供添加、删除和修改学生信息等功能;

◆能将通讯录保存在文件中;

◆能够按指定方式输出学生信息。

系统功能需求分析:

★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;

★2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。

这其中要用到对链表的删除、插入等知识。

删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。

插入时也要先找到相应结点,再添加。

★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。

★4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息。

二、概要设计

系统总体设计框架:

对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。

从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。

系统功能模块图:

 

三、详细设计

主要功能模块的算法设计思路如下:

1、查询通讯录信息(voidchakan())

(1)为开辟一个新单元

(2)输入查询关键字:

(3)读取保存的文件数据输入ASCLL字符:

(4)在链表中寻找相应结点;

(5)调用输出函数,输出结点信息。

2、添加信息函数(voidadd())

(1)定义指向结构体变量的指针;

(2)移动指针,找到插入结点;

(3)在要插入的结点输入信息;

(4)调用保存函数,打开文件,保存输入信息。

3、删除信息函数(voiddel())

(1)定义指向结构体变量的指针;

(2)用指针检验链表中是否有记录,若没记录,返回主函数;

(3)根据要修改的编号查找要删除的结点;

(4)修改链表,删除对应结点。

4、修改信息函数(voidxiugai())

(1)定义指向结构体变量的指针;

(2)读取保存的文件数据输入ASCLL字符:

(3)用指针检验链表中是否有记录,若没记录,返回主函数;

(4)根据要修改的编号查找对应结点;

(5)修改信息;

(6)打开文件,保存修改记录。

5、保存信息函数(baocun())

(1)定义指向结构体变量的指针;

(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:

(3)用指针检验链表中是否有记录,若没记录,返回主函数:

(4)打开文件,保存记录:

6、屏幕操作函数(voidstubent187())

(1)以一定格式输出所想要的图形:

 

四、主要源程序代码

定义变量:

(对整个程序定义全局变量)

#include"stdio.h"

#include"conio.h"

#defineSTUDENTID/*所有STUDENT都用ID来代替*/

typedefstructnode/*定义结构体*/

{charming[50];/*名字*/

charxing[50];/*性别*/

charnian[50];/*年龄*/

intxuehao;/*学号*/

charxibie[50];/*专业*/

charsushe[50];/*宿舍号*/

charjia[50];/*家庭地址*/

structnode*next;

}ID;/*学生信息(变量名)*/

ID*head=NULL;/*定义一个头指针*/

FILE*zhi;/*定义一个文件指针*/

主菜单界面:

(进入屏幕界面的形式)

voidstubent187()/*屏幕格式函数*/

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

printf("*学生信息管理系统*\n");

printf("**\n");

printf("*请选择:

1:

查看;2:

添加;3:

删除;*\n");

printf("*4:

修改;0:

退出系统*\n");

printf("**\n");

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

printf(">>>>>>>>>>>>>输入0~4数字<<<<<<<<<<<<<\n");

return;

}

查看学生信息记录:

(对以保存在磁盘文件的学生信息进行查询)

voidchakan()

{/*查看*/

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;

}

};

}

添加学生信息记录:

()

voidadd()

{

chari;/*添加*/

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();gotoloop;/*清屏在循环*/

}

else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);

if(i=='y'||i=='Y')/*是否要保存*/

{baocun();/*调用保存*/

clrscr();/*清屏*/

stubent187();/*调用屏幕函数*/

printf("保存成功");

}

elseif(i=='n'||i=='N')

{

clrscr();/*清屏*/

stubent187();}/*调用屏幕函数*/

}

return;

}

删除学生信息操作:

(对以存的学生信息进行删除)

voiddel()

{/*删除*/

ID*A,*B;/*定义指针*/

chart,i;intxuehao;/*定义整型变量与字符型变量*/

A=B=NULL;

if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");

else

{loop:

printf("请输入要删除的学生学号:

");scanf("%d",&xuehao);

while(!

feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:

*/

if(A!

=NULL&&A->xuehao!

=xuehao)

A=A->next;

elsebreak;

}

if(A->xuehao==xuehao)

{head=A->next;

free(*A);

printf("成功!

\n");

printf("是否继续删除(Y/N)");scanf("%s",&i);

if(i=='y'||i=='Y')

{clrscr();gotoloop;

}

if(i=='n'||i=='N')

printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);

if(i=='y'||i=='Y')

baocun();

else

clrscr();

stubent187();

}

elseprintf("无法找到此编号\n");

}

}

修改学生信息操作:

(对保存的学生信息进行修改)

voidxiugai()

{/*修改*/

ID*t1,*t2;/*定义指针*/

inti;charxuehao;/*定义整型变量与字符型变量*/

t1=head;

if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");

loop:

printf("请输入要修改的学号:

");scanf("%s",&xuehao);/*输入编号*/

while(!

feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:

*/

if(t1!

=NULL&&t1->xuehao!

=xuehao)

t1=t1->next;

elsebreak;

}

if(t1->xuehao==xuehao)

{fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);

printf("输入名字:

");scanf("%s",&t1->ming);/*名字*/

printf("输入性别:

");scanf("%s",&(t1->xing));/*性别*/

printf("输入年龄:

");scanf("%s",&(t1->nian));/*年龄*/

printf("输入学号:

");scanf("%s",&t1->xuehao);/*学号*/

printf("输入系别:

");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:

");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:

");scanf("%s",&(t1->jia));/*家庭地址*/

printf("成功!

\n");

printf("是否继续修改(Y/N)");scanf("%d",&i);

if(i=='y'||i=='Y')

{clrscr();gotoloop;

}

if(i=='n'||i=='N')

printf("是否保存此次修改(Y/N)\n");scanf("%c",&i);

if(i=='y'||i=='Y')

baocun();

else

clrscr();/*清屏*/

stubent187();/*调用屏幕函数*/

}

elseprintf("没有此编号\n");

return;

}

保存添加,删除,修改学生的信息:

(操作过后是否保存)

baocun()/*保存*/

{

ID*t=head;/*定义指针*/

zhi=fopen("yihu1.txt","a+");/*(读写yihu.txt文本)*/

while(t!

=NULL){

fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以zhi为文件指针保存*/

t=t->next;

}

fclose(zhi);/*关闭此文件*/

printf("成功!

\n");

return;

}

主菜单操作:

(选择所需要的操作)

main()/*主函数*/

{

inti;/*定义整形变量i*/

stubent187();/*调用屏幕函数*/

while

(1)

{

scanf("%d",&i);/*输入要执行的操作*/

switch(i)

{case1:

chakan();break;/*调用查看函数*/

case2:

add();break;/*调用添加函数*/

case3:

del();break;/*调用删除函数*/

case4:

xiugai();break;/*调用修改函数*/

case0:

exit(0);/*结束*/

default:

printf("输入错误,请在此输入\n");continue;

}/*输入不是0~4的,则返回*/

}

}

Ⅰ源函数代码:

voidchakan()

{/*查看*/

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;

}

};

}

voidadd()

{

chari;/*添加*/

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();gotoloop;/*清屏在循环*/

}

else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);

if(i=='y'||i=='Y')/*是否要保存*/

{baocun();/*调用保存*/

clrscr();/*清屏*/

stubent187();/*调用屏幕函数*/

printf("保存成功");

}

elseif(i=='n'||i=='N')

{

clrscr();/*清屏*/

stubent187();}/*调用屏幕函数*/

}

return;

}

voiddel()

{/*删除*/

ID*A,*B;/*定义指针*/

chart,i;intxuehao;/*定义整型变量与字符型变量*/

A=B=NULL;

if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");

else

{loop:

printf("请输入要删除的学生学号:

");scanf("%d",&xuehao);

while(!

feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:

*/

if(A!

=NULL&&A->xuehao!

=xuehao)

A=A->next;

elsebreak;

}

if(A->xuehao==xuehao)

{head=A->next;

free(*A);

printf("成功!

\n");

printf("是否继续删除(Y/N)");scanf("%s",&i);

if(i=='y'||i=='Y')

{clrscr();gotoloop;

}

if(i=='n'||i=='N')

printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);

if(i=='y'||i=='Y')

baocun();

else

clrscr();

stubent187();

}

elseprintf("无法找到此编号\n");

}

}

voidxiugai()

{/*修改*/

ID*t1,*t2;/*定义指针*/

inti;charxuehao;/*定义整型变量与字符型变量*/

t1=head;

if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");

loop:

printf("请输入要修改的学号:

");scanf("%s",&xuehao);/*输入编号*/

while(!

feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:

*/

if(t1!

=NULL&&t1->xuehao!

=xuehao)

t1=t1->next;

elsebreak;

}

if(t1->xuehao==xuehao)

{fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);

printf("输入名字:

");scanf("%s",&t1->ming);/*名字*/

printf("输入性别:

");scanf("%s",&(t1->xing));/*性别*/

printf("输入年龄:

");scanf("%s",&(t1->nian));/*年龄*/

printf("输入学号:

");scanf("%s",&t1->xuehao);/*学号*/

printf("输入系别:

");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:

");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:

");scanf("%s",

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1