admin 管理员组

文章数量: 887021


2024年2月7日发(作者:jsswitch语句输入偶数)

C语言上机实验报告

姓名:

学号:

班级:

指导老师:学院:

学校:

------学生信息管理系统设计

C语言上机实验报告

------学生信息管理系统设计

一、实验题目

学生信息管理系统设计

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:

(1) 系统以菜单方式工作

(2) 学生信息录入功能(学生信息用文件保存)---输入

(3) 学生信息浏览功能---输出

(4) 查询、排序功能---算法

(5) 按学号查询

(6) 按姓名查询

(7) 学生信息的删除与修改(可选项)

二、本课程的地位、作用与目的

为综合应用C语言程序设计理论知识、进一步提高学生综合解决问题、协调工作的能力和良好的软件开发习惯,特安排本实验内容。希望通过该实习能够进一步激发学生的学习热情,培养学生初步编程的能力,为后续的学习和发展奠定基础。

三、分析过程

1、能够实现对学生基本信息数据的增加和删除

2、实现对录入保存后的学生基本信息进行格式化浏览

3、提供学号和姓名两种方式对学生基本信息数据的查询

4、能够对随机输入的学生基本信息数据按学号进行排序

5、学生信息数据保存在文件中,方便数据的多次使用

为了实现以上功能,必须设计的函数如下:

录入函数、查询函数(分为姓名查询和学号查询)、删除函数、排序函数和几个菜单绘制函数等

四、实验源代码 :

#include

#include

#include

#include

#include

#define num 12

//定义学生结构体

typedef struct student

{

int id;

char name[num];

int age;

char sex[4];

struct birth

{

int year;

int month;

int day;

}date;

char add[30];

int phone;

}stu;

//功能选择菜单

void menu()

{

printf("n");

printf("n");

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

printf("n");

printf("

***********************************************************************n");

printf(" ==============1.学生信息录入 2.学生信息浏览===============n");

printf("n");

printf(" ==============3.学号查询信息 4.姓名查询信息===============n");

printf("n");

printf(" ==============5.按学号排序 6.删除学生信息===============n");

printf("n");

printf(" ============== 0.退出系统

===============n");

printf("n");

printf("n");

printf("

**********************************************************************n");

printf("n");

printf(" 按编号选择对应功能n");

printf("n");

printf(" +++++++++++++++++++ XXXXXXX制作

+++++++++++++++++++++n");

printf("n");

}

//修改菜单

void printmenu()

{

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

printf("-------1.完全修改 2.学号修改---------");

printf("-------3.姓名修改 4.性别修改---------");

printf("-------5.生日修改 6.地址修改---------");

printf("-------7.电话修改 0.退出修改---------");

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

}

//取当前时间

int nowtime()

{

struct tm *local;

time_t t;

t=time(NULL);

local=localtime(&t);

return local->tm_year+1900;//求出当前时间的年份

}

//输出文件中学生信息

void print(char *file)

{

stu temp;

FILE *fp=fopen(file,"r");

if(fp==NULL)

{

printf("打开文件%s失败!n",file);

return;

}

printf("文件%s中学生信息如下:n",file);

printf("%8s%8s%6s%6s%8s%4s%4s%16s%12sn","学号","姓名","年龄","性别","出生年","月","日","地址","电话");

fseek(fp,0,SEEK_SET);//从文件开始为之读取

while(fread(&temp,sizeof(stu),1,fp))

printf("%8d%8s%6d%6s%8d%4d%4d%16s%12dn",,,,,,,,,);

//格式化输出学生信息

fclose(fp);//关闭文件

}

void luru(char *file)

{

int count,sexnum,i=0,m;

stu temp,temp1;

FILE *fp=fopen(file,"a+");//追加方式打开文件

if(fp==NULL)

{

printf("打开文件%s失败!",file);

return;

}

printf("请确定本次需要录入几名学生信息:");

scanf("%d",&count);

for (i=0;i

{

printf("录入要写入文件%s的第%d名学生信息n",file,i+1);

Repeat:

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

m=scanf("%d",&);

if (m==0)

{

printf("输入的数据不是整型数据!n");

fflush(stdin);//清除缓存

goto Repeat;

}

fseek(fp,0,SEEK_SET);//从文件开始位置读取

while(fread(&temp1,sizeof(stu),1,fp))

{

if (==)//判断学号是否已存在

{

printf("学号已存在!n");

goto Repeat;

}//若学号已存在,返回继续读取学号

}

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

scanf("%s",);

printf("请输入性别:0为女生,1为男生:");

{scanf("%d",&sexnum);

if (sexnum==1) strcpy(,"男");

else strcpy(,"女");

}

printf("请输入出生年月日:");

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

=nowtime()-;

printf("请输入地址:");

scanf("%s",&);

printf("请输入联系电话11位:");

scanf("%d",&);

if(!fwrite(&temp,sizeof(stu),1,fp))

{

printf("向文件%s写入信息失败!n",file);

return;

}

}

printf("向文件%s写入信息成功!n",file);

fclose(fp);

}

int IsEmpty(FILE *fp)

{

int len;

fseek(fp,0,SEEK_END);//指针移动到文件尾

len=ftell(fp);//取指针的文职获取长度

return(len==0)?1:0;//0代表文件为空

}

void idsearch(char *file)

{

int findid;

stu temp;

FILE *fp=fopen(file,"r");

if (fp==NULL)

{

printf("文件无法打开!");

return;

}

if(IsEmpty(fp))

{

printf("文件为空,请先录入信息!");

return;

}

printf("输入要查找学生的学号:");

scanf("%d",&findid);

fseek(fp,0,SEEK_SET);

while(fread(&temp,sizeof(stu),1,fp))

{

if(==findid)

{

printf("%8s%8s%6s%6s%8s%4s%4s%16s%11sn","学号","姓名","年龄","性别","出生年","月","日","地址","电话");

printf("%8d%8s%6d%6s%8d%4d%4d%16s%11dn",,,,,,,,,);

//格式化输出学生信息

return;

}

}

printf("没有找到学号为%d的学生的信息!",findid);

return;

fclose(fp);

}

void namesearch(char *file)

{

char name[num];

stu temp;

FILE *fp=fopen(file,"r");

if (fp==NULL)

{

printf("文件无法打开!");

return;

}

if(IsEmpty(fp))

{

printf("文件为空,请先输入学生信息!");

return;

}

printf("输入要查找的学生的姓名:");

scanf("%s",name);

fseek(fp,0,SEEK_SET);

while(fread(&temp,sizeof(stu),1,fp))

{

if (!strcmp(,name))

{

printf("下面是姓名为%s的学生的信息:n",name);

printf("%8s%8s%6s%6s%8s%4s%4s%16s%11sn","学号","姓名","年龄","性别","出生年","月","日","地址","电话");

printf("%8d%8s%6d%6s%8d%4d%4d%16s%11dn",,,,,,,,,);

//格式化输出学生信息

return;

}

}

printf("没有找到姓名为%s的学生的信息!",name);

fclose(fp);

}

//排序函数

void paixu(char *file)

{

int i,j,k,len;

stu s[num],temp;

FILE *fp=fopen(file,"r");

if(fp==NULL)

{

printf("文件无法打开!");

return;

}

if(IsEmpty(fp))

{

printf("文件为空,请先录入信息!");

return;

}

fseek(fp,0,SEEK_END);//指针移动到文件末尾

len=ftell(fp)/sizeof(stu);

fseek(fp,0,SEEK_SET);

for(i=0;i

fread(s+i,sizeof(stu),1,fp);

fclose(fp);

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(s[j].id

k=j;

}

if(k!=i)

{

temp=s[i];

s[i]=s[k];

s[k]=temp;

}

}

printf("下面是按学号从小到大顺序排序后的学生的信息:n");

printf("%8s%8s%6s%6s%8s%4s%4s%16s%11sn","学号","姓名","年龄","性别","出生年","月","日","地址","电话");

for(i=0;i

printf("%8d%8s%6d%6s%8d%4d%4d%16s%11dn",s[i].id,s[i].name,s[i].age,s[i].sex,s[i].,s[i].,s[i].,s[i].add,s[i].phone);

//格式化输出学生信息

remove("学生信息表.txt");//删除以前存放数据的文件

fp=fopen(file,"w");

for(i=0;i

fwrite(s+i,sizeof(stu),1,fp);

fclose(fp);

}

//删除函数

void shanchu(char *file)

{

int i=0,len,del;

stu s[num];

FILE *fp=fopen(file,"r");

if(fp==NULL)

{

printf("文件无法打开!");

return;

}

if(IsEmpty(fp))

{

printf("文件为空,请先录入学生信息!");

return;

}

printf("输入需要删除的学生的学号:");

scanf("%d",&del);

fseek(fp,0,SEEK_SET);

while(fread(s+i,sizeof(stu),1,fp))

{

if(s[i].id==del)

{

printf("下面是按学号为%d的学生的信息:n",del);

printf("%8s%8s%6s%6s%8s%4s%4s%16s%11sn","学号","姓名","年龄","性别","出生年","月","日","地址","电话");

printf("%8d%8s%6d%6s%8d%4d%4d%16s%11dn",s[i].id,s[i].name,s[i].age,s[i].sex,s[i].,s[i].,s[i].,s[i].add,s[i].phone);

//格式化输出学生信息

i=i-1;

}

i++;

}

fclose(fp);

len=i;

fp=fopen(file,"w");

fseek(fp,0,SEEK_SET);

for(i=0;i

fwrite(s+i,sizeof(stu),1,fp);

fclose(fp);

}

void main()

{

int key;

char file[]={"学生信息表.txt"};

do

{

menu();

printf("选择对应功能操作:");

scanf("%d",&key);

switch(key)

{

case 1:

luru(file);

break;

case 2:

print(file);

break;

case 3:

idsearch(file);

break;

case 4:

namesearch(file);

break;

case 5:

paixu(file);

break;

case 6:

shanchu(file);

break;

case 0:

exit(0);

default:

printf("选择错误,请重新选择!");

}

printf("n");

printf("按任意键返回上级菜单!");

getch();

fflush(stdin);

system("cls");

}while (key!=0);

}

五.实验过程及结果:

1.程序主菜单运行界面

2.学生信息录入运行界面

3.学生信息浏览运行界面

4.学生学号查询运行界面

5.学生姓名查询运行界面

6.按学号排序运行界面

第一次出现乱码,改正后运行如第二张图片所示

7.删除学生信息运行界面

六、感想

在本次实验的过程中,出现了各种各样的问题。从刚接到作业就开始筹备,本次实验需要哪些知识,文件还是链表等等。这也是我写的最长的一个代码,可以留作纪念哈。在实验过程中,做薄弱的环节是文件和指针,参考书上的内容,自己写了很多。不懂之处也上网查了很多资料。代码总是在不断调试和修改中不断完善,调试过程的发现的错误看起来很可笑,但又不能不谨慎对待。深知一个马蹄铁能毁掉一个国家,也就不敢不慎重对待每个可能出现的问题了。让我最郁闷的一个问题是,编译不报错,执行的时候也没问题,就是功能不齐,出现意料之外的乱码,后来把错误缩小范围,是排序函数出错,但是反复差了多次,都没发现问题,直到最近才发现中间少了三行代码!!其中用到了文件和指针,还是知识不够牢啊,书到用时方恨少!!最后就是对代码修改,不断美化界面了,最终还算满意~~

这次实验历时10周,时间之长足以让我记住实验的重要性了,何况其中还出现了很多问题解决后的欣喜。总之,这次实验虽谈不上完美,但也值得做个纪念了,而且知识是永远不会过期的。


本文标签: 学生 信息 文件 实验 学号