您的位置:首页 > 编程语言 > C语言/C++

文件管理

2016-12-02 14:59 183 查看
要求:创建一个新文件,文件内容为本班所有同学的学号、姓名、操作系统课程成绩,要求采用有格式的存储方式;文件建立后,能对文件进行插入、删除、查找等操作。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <unistd.h>
int NUM = 0;

struct student{
char num[20];// 学号
char nam[20];// 姓名
int score; // 成绩
struct student * next;
};

typedef struct student Stu;
typedef Stu * STU;

void SaveConf(STU head);
void Menu(STU head);
void LoadConf(STU head);
void Create(STU head);

/*头节点初始化*/
void Init(STU *head)
{
(*head) = (STU)malloc(sizeof(Stu));
(*head)->next = NULL;
}

/*从文件加载信息至链表*/
void LoadConf(STU head)
{
int i = 1;

FILE *fp;
STU newstu;
STU p= head;
fp = fopen("text.txt","r+");
if(fp == NULL)
{
printf("文件不存在!\n");
printf("已为您创建文件!\n");
fp = fopen("text.txt","a+");
}
while(i > 0)
{
newstu = (STU)malloc(sizeof(Stu));
i = fscanf(fp,"%s %s %d\n",newstu->num,newstu->nam,&newstu->score);

if(i == -1)
{
free(newstu);
newstu = NULL;
break;
}

p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = NULL;
//ch = fgetc(fp);
//if(ch == 'EOF')
// {
// break;
// }

}
p = NULL;
fclose(fp);
}

/*显示*/
void Display(STU head)
{
STU p = head;
printf("学号 姓名 操作系统成绩\n");
while(p->next != NULL)
{
printf("%s %s %d\n",p->next->num,p->next->nam,p->next->score);
p = p->next;
}

getchar();
getchar();
Menu(head);
}

/*插入信息*/
void Create(STU head)
{
STU newstu;
STU p = head;
//fp = fopen("text.txt","a+");
// if(fp == NULL)
// {
// printf("打开文件失败!\n");
// return;
// }
newstu = (STU)malloc(sizeof(Stu));

printf("请输入学号:");
scanf("%s",newstu->num);

printf("请输入姓名:");
scanf("%s",newstu->nam);

printf("请输入成绩:");
scanf("%d",&newstu->score);

while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = NULL;

// fprintf(fp,"%s %s %d\n",newstu->num,newstu->nam,newstu->score);//写入数据到文件中 '
//
// fclose(fp);

char flag;
getchar();
printf("是否继续插入信息:");
scanf("%c",&flag);
if('y' == flag)
{
Create(head);
}
else
{
Menu(head);
}
}
/*保存信息到文件*/
void SaveConf(STU head)
{
FILE *fp;
STU p = head->next;
fp = fopen("text.txt","w");
if(fp == NULL)
{
printf("打开文件失败!\n");
return;
}
while(p != NULL)
{
fprintf(fp,"%s %s %d\n",p->num,p->nam,p->score);//写入数据到文件中
p = p->next;
}

fclose(fp);
}

/*删除*/
STU search(STU head,char *s)
{
STU p;
p = head->next;
while(p != NULL)
{
if(strcmp(s,p->num) == 0)
{
return p;
}
p = p->next;
}
return p;
}
void Delete(STU head)
{
STU p;
STU q = head;

char flag;
char flag1;
char n[20];
printf("请输入需要删除的学号: ");
scanf("%s",&n);
p = search(head,n);
if(p == NULL)
{
getchar();
printf("你输入的学号有误,没有这个人!\n");
printf("重新输入,还是返回!(y / n): ");
scanf("%c",&flag);
if(flag == 'y')
{
Delete(head);
}
else
{
Menu(head);

}
}
else
{
getchar();
printf("%s %s %d\n",p->num,p->nam,p->score);
printf("确定要删除吗?");
scanf("%c",&flag1);
if(flag1 == 'y')
{
q = head;
while(q->next != p)
{
q = q->next;
}
q->next = p->next;
p->next = NULL;
free(p);
p = NULL;

printf("delete success!\n");
}
}

Menu(head);
}

/*查找*/
void Constant(STU head)
{
STU p = head;
char name[20];
printf("请输入需要查找人的姓名:");
scanf("%s",name);
while(p != NULL)
{

if(strcmp(name,p->nam) == 0)
{
printf("找到的人有:\n");
printf("%s %s %d\n",p->num,p->nam,p->score);
}
p = p->next;
}
getchar();
getchar();
Menu(head);
}

void Menu(STU head)
{

int choice = 0;
printf("\t********文件管理******\t\n");
printf("\t******1.插入信息******\t\n");
printf("\t******2.删除信息******\t\n");
printf("\t******3.查找**********\t\n");
printf("\t******4.显示信息******\t\n");
printf("\t******0.退出**********\t\n");
printf("\n");
printf("please input your choice: ");
scanf("%d",&choice);

switch(choice)
{
case 1:{
Create(head);

break;
}
case 2:{
Delete(head);
break;
}
case 3:{
Constant(head);
break;
}
case 4:{
Display(head);
break;
}

case 0:{
SaveConf(head);
break;
}

default:{
printf("输入有误,请重新输入!\n");
Menu(head);
break;
}
}
}

int main()
{
STU head;
Init(&head);
LoadConf(head);
Menu(head);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 操作系统