C语言高级应用文件资料地读写.docx
《C语言高级应用文件资料地读写.docx》由会员分享,可在线阅读,更多相关《C语言高级应用文件资料地读写.docx(9页珍藏版)》请在冰点文库上搜索。
C语言高级应用文件资料地读写
C语言程序设计报告
学生管理系统
2010年7月20日
报告人姓名:
学号:
一、设计流程:
1)密码设置:
进入菜单之前用户需要输入密码,有三次验证机会,三次都错误系统自动退出程序。
2)菜单操作:
程序有六个菜单选项:
打开文件(即新建)、显示信息、增添学生信息、保存信息、退出程序和清屏。
二、功能实现
1)密码设置:
用for循环语句进行三次校验,利用系统的strcmp函数判断密码是否正确,密码错误则提示用户error,三次错误直接退出程序。
2)打开文件:
选择1则定义指向文件的指针fp;调用自己定义的函数dakai。
之后自动返回主菜单。
3)显示信息:
选择2则调用自定义的list函数读取显示用户输入的学生信息。
之后自动返回主菜单。
4)增添信息:
选择3程序调用自定义的函数add,之后用户需根据提示输入新增学生信息,完毕后自动返回主菜单。
若果输入的学生num是0的话退出程序。
5)保存信息:
选择4程序调用自定义的函数save,将信息保存到文件stu.txt中,之后自动返回主菜单。
6)退出程序:
选择5程序会提示用户:
是否保存信息?
通过输入y和n来判断:
选择y则调用save函数并调用exit(0)选n则直接调用break退出程序。
注意:
如果已经选择4保存过信息则无需再次选择保存了!
7)清屏:
选择6调用系统函数clrscr清理屏幕,之后自动返回主菜单。
三、工程文件
文件main.c———main函数及菜单函数。
文件qitan.c———包含open、list、save、add函数。
文件struct.h——定义结构体stu,之后声明stu型结构体数组a[100].即最多能输入100个学生的信息。
建立工程文件STUDENT.PRJ。
四、源代码
4main.c部分
#include//头文件
#include
#include
#include
externvoidsave();//外部函数声明
externvoiddakai();
externvoidtuichu();
externvoidlist();
externvoidadd();
externvoidcaidan();
voidmain()//主函数(主要是用于密码设置)
{
charmm[5];
intj;
constcharmma[5]={"pass"};
for(j=0;j<1;j++)//三次密码校验
{
printf("pleaseenterpassword(youhavethreechances):
");
scanf("%s",mm);
if(strcmp(mma,mm)==0)break;
elseprintf("error!
\n");
printf("pleaseenterpassword:
");
scanf("%s",mm);
if(strcmp(mma,mm)==0)break;
elseprintf("error!
\n");
printf("pleaseenterpassword:
");
scanf("%s",mm);
if(strcmp(mma,mm)==0)break;
elseexit(0);
}
caidan();//调用菜单函数
}
voidcaidan(intn)//菜单函数定义
{
intm=0;//变量声明
intchos;
inta,h;
printf("======\n");
printf("1.Open\n");
printf("2.List\n");
printf("3.Add\n");
printf("4.Save\n");
printf("5.Exit\n");
printf("6.clearthescreen\n");
printf("======\n");
printf("pleasechoose:
");
scanf("%d",&chos);
switch(chos)//选择要进行的操作
{
case1:
dakai();//调用函数dakai()
break;
case2:
list();//调用函数list()
caidan(n);
case3:
//Add
add();//调用函数add()
caidan(n);//调用函数caidan()
case5:
break;
case4:
save(m,n);//调用函数save()
caidan(n);//调用函数caidan()
case6:
clrscr();//调用函数系统clrscr()用于清屏
caidan(n);//调用函数caidan()
}
if(chos==5)
{
printf("Doyouwanttosavetheinformationyoujustinput.(y/n)\n");
scanf("%s",&h);
if(h=='y')
{save();
exit(0);}
if(h=='n')
{exit(0);}
}
}
qita.c部分:
#include//头文件
#include
#include
#include
#include"struct.h"
staticintn=0;//定义静态变量n用于统计学生个数
voidcaidan();//函数声明
externvoiddakai()//函数定义
{
FILE*fp;
if((fp=fopen("stu.txt","wt+"))==NULL)
{printf("Error!
");
getch();
exit
(1);
}
elseprintf("\nfinish!
\n");
fclose(fp);
caidan();
}
voidlist()//定义函数list()
{
FILE*fp;
intj;intb;
if((fp=fopen("stu.txt","r"))==NULL)
{
printf("Error!
");
getch();
exit
(1);
}
//读数据
for(j=0;j<=n;j++)
{
fscanf(fp,"%s%d%s%ld",a[j].name,&a[j].num,a[j].zuoye,&a[j].phone);
printf("%s%d%s%ld",a[j].name,a[j].num,a[j].zuoye,a[j].phone);
printf("%s","\n");
}
fclose(fp);
caidan();
}
externvoidadd()//定义函数add()
{FILE*fp;
charcho;
if((fp=fopen("stu.txt","at+"))==NULL)
{
printf("error\n");
getch();
exit
(1);
}
printf("pleaseenterthename:
");
scanf("%s",a[n].name);
printf("pleaseenterthenumber:
");
scanf("%d",&a[n].num);
{
if(a[n].num==0)
exit(0);
}
printf("pleaseenterthezuoye:
");
scanf("%s",a[n].zuoye);
printf("pleaseenterthephone:
");
scanf("%ld",&a[n].phone);
n++;
fclose(fp);
}
voidsave()//定义函数save()
{
FILE*fp;
intm=0;
if((fp=fopen("stu.txt","at+"))==NULL)
{
printf("error\n");
exit
(1);
}
for(m=0;m<=n;m++)//将所有的学生信息输入文件
{
fprintf(fp,"%s",a[m].name);
fprintf(fp,"%d",a[m].num);
fprintf(fp,"%s",a[m].zuoye);
fprintf(fp,"%ld",a[m].phone);
}
fclose(fp);
}
struct.h部分
#ifndefhehe
#definehehe
structstu//结构体定义
{
charname[10];
intnum;
charzuoye[10];
longphone;
};
structstua[100];
#endif