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周,时间之长足以让我记住实验的重要性了,何况其中还出现了很多问题解决后的欣喜。总之,这次实验虽谈不上完美,但也值得做个纪念了,而且知识是永远不会过期的。
版权声明:本文标题:C语言上机实验报告--学生信息管理系统设计__内附源代码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707235898h512848.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论