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

华清远见C语言学习笔记八

2012-07-07 15:42 225 查看
/*

* test.c

*

* Created on: Jun 29, 2012

* Author: 孙旭

* 华清远见实验室

*/

/*使用链表和文件组合操作*/

#include <stdio.h>

#include<malloc.h>

#pragma pack(2)

typedef struct

{

char name[10];

char sno[15];

int age;

char sex[10];

struct student *next;

}student;

void AddStudentIoFile();

void writeStudentFile(student *stu);

void readStudentFile();

void ClearFile();

void menu();

void ReadRecordOfIndex();

void InsertStudentOfIndex();

void FindRecordByName();

int CompareString(char str1[],char str2[]);

int main() {

int choice;

menu();

while(1)

{

puts("请选择菜单项:");

scanf("%d",&choice);

switch(choice)

{

case 1:

AddStudentIoFile();

break;

case 2:

readStudentFile();

break;

case 3:

ReadRecordOfIndex();

break;

case 4:

InsertStudentOfIndex();

break;

case 5:

FindRecordByName();

break;

case 6:

ClearFile();

break;

default:

puts("结束输入\n");

return 0;

}

}

return 0;

}

void menu()

{

puts("+++++++++++++++++++++");

puts("1.写入学生记录");

puts("2.显示文件所有记录");

puts("3.按索引读文件记录");

puts("4.按索引插入学生记录");

puts("5.按名字查找记录");

puts("6.清空文件");

puts("++++++++++++++++++++++");

}

void AddStudentIoFile()

{

student *head,*pend,*p;

pend=(student*)malloc(sizeof(student));

head=pend;

int num,i=0;

puts("请输入要插入学生的个数:");

scanf("%d",&num);

puts("请输入学生信息:");

scanf("%s %s %d %s",pend->name,pend->sno,&pend->age,pend->sex);

for(i=0;i<num-1;i++)

{

p=(student*)malloc(sizeof(student));

scanf("%s %s %d %s",p->name,p->sno,&p->age,p->sex);

pend->next=p;

pend=p;

pend->next=NULL;

}

writeStudentFile(head);

}

void writeStudentFile(student *stu)

{

FILE *fp;

fp=fopen("/home/linux/sunxu.txt","ab+");

do

{

fwrite(stu,sizeof(student),1,fp);

stu=stu->next;

}while(stu!=NULL);

printf("完成写信息到文件!!\n");

fclose(fp);

}

void readStudentFile()

{

FILE *fp;

student *stu=NULL;

fp=fopen("/home/linux/sunxu.txt","rb");

stu=(student*)malloc(sizeof(student));

fread(stu,sizeof(student),1,fp);

printf("开始读文件信息!!\n");

do

{

printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);

fread(stu,sizeof(student),1,fp);

}while(!feof(fp));

printf("完成读文件信息!!\n");

fclose(fp);

}

void ClearFile()

{

FILE *fp;

fp=fopen("/test/hu.txt","wb+");

if(fp)printf("清空完成\n");

fclose(fp);

}

void ReadRecordOfIndex()

{

FILE *fp;

int index;

student *stu;

fp=fopen("/home/linux/sunxu.txt","rb+");

if(!fp)printf("打开文件失败!!");

puts("请输入要读记录的索引号:");

scanf("%d",&index);

stu=(student*)malloc(sizeof(student));

fseek(fp,(index-1)*sizeof(student),0);

fread(stu,sizeof(student),1,fp);

printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);

fclose(fp);

}

void InsertStudentOfIndex()

{

int i=0,index,count;

student stu[25],*stuToIns;

FILE *fp;

//stu=(student*)malloc(sizeof(student));

fp=fopen("/test/hu.txt","rb+");

if(!fp)printf("打开文件失败!!");

puts("请输入要插入记录的索引:");

scanf("%d",&index);

fseek(fp,(index-1)*sizeof(student),0);

while(!feof(fp))

{

fread(&stu[i],sizeof(student),1,fp);

i++;

}

count=i+1;

for(i=0;i<count;i++)

{

printf("%s\t%s\t%d\t%s\n",stu[i].name,stu[i].sno,stu[i].age,stu[i].sex);

}

stuToIns=(student*)malloc(sizeof(student));

puts("输入插入学生的信息:");

scanf("%s %s %d %s",stuToIns->name,stuToIns->sno,&stuToIns->age,stuToIns->sex);

fseek(fp,(index-1)*sizeof(student),0);

fwrite(stuToIns,sizeof(student),1,fp);

for(i=0;i<count;i++)

{

fwrite(&stu[i],sizeof(student),1,fp);

}

puts("插入记录成功!!");

fclose(fp);

}

void FindRecordByName()

{

student *stu;

char findname[20];

stu=(student*)malloc(sizeof(student));

FILE *fp;

fp=fopen("/home/linux/sunxu.txt","rb+");

puts("请输入要查找的名字:");

scanf("%s",findname);

//printf("%s",findname);

while(!feof(fp))

{

fread(stu,sizeof(student),1,fp);

if(CompareString(findname,stu->name)==1)

{

printf("%s\t%s\t%d\t%s\n",stu->name,stu->sno,stu->age,stu->sex);

return;

}

}

puts("没发现含该名字的记录");

}

int CompareString(char str1[],char str2[])

{

int i;

for(i=0;i<strlen(str1);i++)

{

if(str1[i]!=str2[i])return 0;

}

return 1;

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