當前文章列出了4個文件編程相關的練習題。文件拷貝實現、 文件加密、學生管理系統鏈表模板(未添加文件操作)、學生管理系統模板(通過文件系統保存信息)、等4個例子。
1.1 文件拷貝實現
#include
#include
#include
int main()
{
/*1. 打開源文件*/
FILE *file_src;
FILE *file_new;
unsigned char buff[1024];
unsigned int cnt;
file_src=fopen("D:/123.pdf","rb");
if(file_src==NULL)
{
printf("源文件打開失敗!\n");
return -1;
}
/*2. 創建新文件*/
file_new=fopen("D:/456.pdf","wb");
if(file_new==NULL)
{
printf("新文件創建失敗!\n");
return -1;
}
/*3. 拷貝文件*/
while(!feof(file_src))
{
cnt=fread(buff,1,1024,file_src);
fwrite(buff,1,cnt,file_new);
}
/*4. 關閉文件*/
fclose(file_new);
fclose(file_src);
printf("文件拷貝成功!\n");
return 0;
}
1.2 文件加密
使用: 異或 ^
密碼類型: (1) 整型密碼 (2) 字符串密碼
比如: 銀行提款機的密碼、QQ密碼
加密代碼:
#include
#include
#include
int main()
{
/*1. 打開源文件*/
FILE *file_src;
FILE *file_new;
unsigned char buff[1024];
unsigned int cnt;
unsigned int password=123456; //密碼數據
unsigned int data; //存放讀取的數據
file_src=fopen("D:/123.pdf","rb");
if(file_src==NULL)
{
printf("源文件打開失敗!\n");
return -1;
}
/*2. 創建新文件*/
file_new=fopen("D:/456.pdf","wb");
if(file_new==NULL)
{
printf("新文件創建失敗!\n");
return -1;
}
/*3. 文件加密*/
while(!feof(file_src))
{
cnt=fread(&data,1,4,file_src);
data=data^password;//文件數據加密
fwrite(&data,1,cnt,file_new);
}
/*4. 關閉文件*/
fclose(file_new);
fclose(file_src);
printf("文件加密成功!\n");
return 0;
}
解密代碼:
?
#include
#include
#include
int main()
{
/*1. 打開源文件*/
FILE *file_src;
FILE *file_new;
unsigned char buff[1024];
unsigned int cnt;
unsigned int password=123456; //密碼數據
unsigned int data; //存放讀取的數據
file_src=fopen("D:/456.pdf","rb");
if(file_src==NULL)
{
printf("源文件打開失敗!\n");
return -1;
}
/*2. 創建新文件*/
file_new=fopen("D:/789.pdf","wb");
if(file_new==NULL)
{
printf("新文件創建失敗!\n");
return -1;
}
/*3. 文件加密*/
while(!feof(file_src))
{
cnt=fread(&data,1,4,file_src);
data=data^password;//文件數據加密
fwrite(&data,1,cnt,file_new);
}
/*4. 關閉文件*/
fclose(file_new);
fclose(file_src);
printf("文件解密成功!\n");
return 0;
}
1.3 學生管理系統鏈表模板(未添加文件操作)
#include
#include
#include
//存放信息的結構體
struct MyStruct
{
char Name[50]; //存放姓名
int Number; //存放編號
struct MyStruct *next; //存放下一個節點的地址
};
//鏈表相關的函數接口
struct MyStruct *ListHead=NULL; //鏈表頭
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);
int main()
{
struct MyStruct data1={"張三",123};
struct MyStruct data2={"李四",456};
struct MyStruct data3={"小王",789};
ListHead=CreateListHead(ListHead);
//添加信息
AddrListInfo(ListHead,data1);
AddrListInfo(ListHead,data2);
AddrListInfo(ListHead,data3);
//刪除節點
DeleteListInfo(ListHead,123);
DeleteListInfo(ListHead,789);
//打印
PrintListAllInfo(ListHead);
return 0;
}
/*
函數功能: 創建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
if(head==NULL)
{
head=malloc(sizeof(struct MyStruct));
head->next=NULL;
}
return head;
}
/*
函數功能: 在鏈表結尾添加節點
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
p=p->next;
}
tmp=malloc(sizeof(struct MyStruct));
memcpy(tmp,&data,sizeof(struct MyStruct));
p->next=tmp;
tmp->next=NULL;
}
/*
函數功能: 根據結構體里特有的成員區分進行刪除鏈表節點信息
函數參數: int numbe 編號
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
tmp=p; //保存上一個節點的信息
p=p->next;
if(p->Number==number)
{
tmp->next=tmp->next->next;
free(p);
p=head; //鏈表頭歸位
}
}
}
/*
函數功能: 打印所有節點信息
函數參數: int numbe 編號
*/
void PrintListAllInfo(struct MyStruct *head)
{
struct MyStruct *p=head;
int cnt=0;
printf("\n鏈表全部信息如下:\n");
while(p->next!=NULL)
{
p=p->next;
cnt++;
printf("第%d個節點信息: %s,%d\n",cnt,p->Name,p->Number);
}
}
1.4 學生管理系統模板(通過文件系統保存信息)
#include
#include
#include
//存放信息的結構體
struct MyStruct
{
char Name[50]; //存放姓名
int Number; //存放編號
struct MyStruct *next; //存放下一個節點的地址
};
//鏈表相關的函數接口
struct MyStruct *ListHead=NULL; //鏈表頭
struct MyStruct *CreateListHead(struct MyStruct *head);
void AddrListInfo(struct MyStruct *head,struct MyStruct data);
void DeleteListInfo(struct MyStruct *head,int number);
void PrintListAllInfo(struct MyStruct *head);
//文件操作相關函數
void SaveListAllInfo(struct MyStruct *head,char *path);
void GetListAllInfo(struct MyStruct *head,char *path);
#if 0
int main()
{
struct MyStruct data1={"張三",123};
struct MyStruct data2={"李四",456};
struct MyStruct data3={"小王",789};
ListHead=CreateListHead(ListHead);
AddrListInfo(ListHead,data1);
AddrListInfo(ListHead,data2);
AddrListInfo(ListHead,data3);
//保存節點信息
SaveListAllInfo(ListHead,"D:/list.ini");
//打印
PrintListAllInfo(ListHead);
return 0;
}
#endif
#if 1
int main()
{
ListHead=CreateListHead(ListHead);
//獲取節點信息
GetListAllInfo(ListHead,"D:/list.ini");
//打印
PrintListAllInfo(ListHead);
return 0;
}
#endif
/*
函數功能: 創建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
if(head==NULL)
{
head=malloc(sizeof(struct MyStruct));
head->next=NULL;
}
return head;
}
/*
函數功能: 在鏈表結尾添加節點
*/
void AddrListInfo(struct MyStruct *head,struct MyStruct data)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
p=p->next;
}
tmp=malloc(sizeof(struct MyStruct));
memcpy(tmp,&data,sizeof(struct MyStruct));
p->next=tmp;
tmp->next=NULL;
}
/*
函數功能: 根據結構體里特有的成員區分進行刪除鏈表節點信息
函數參數: int numbe 編號
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
tmp=p; //保存上一個節點的信息
p=p->next;
if(p->Number==number)
{
tmp->next=tmp->next->next;
free(p);
p=head; //鏈表頭歸位
}
}
}
/*
函數功能: 打印所有節點信息
函數參數: int numbe 編號
*/
void PrintListAllInfo(struct MyStruct *head)
{
struct MyStruct *p=head;
int cnt=0;
printf("\n鏈表全部信息如下:\n");
while(p->next!=NULL)
{
p=p->next;
cnt++;
printf("第%d個節點信息: %s,%d\n",cnt,p->Name,p->Number);
}
}
/*
函數功能: 保存鏈表節點信息
*/
void SaveListAllInfo(struct MyStruct *head,char *path)
{
struct MyStruct *p=head;
FILE *file;
file=fopen(path,"a+b");
if(file==NULL)
{
printf("保存信息的文件打開失敗!\n");
return ;
}
while(p->next!=NULL)
{
p=p->next;
fwrite(p,1,sizeof(struct MyStruct),file);
}
fclose(file);
}
/*
函數功能: 從文件里獲取鏈表節點信息
*/
void GetListAllInfo(struct MyStruct *head,char *path)
{
struct MyStruct *p=head;
FILE *file;
struct MyStruct data;
file=fopen(path,"rb");
if(file==NULL)
{
printf("保存信息的文件打開失敗!\n");
return;
}
//循環讀取文件里的數據
while(!feof(file))
{
fread(&data,1,sizeof(struct MyStruct),file); //讀取鏈表節點數據
AddrListInfo(head,data); //添加鏈表節點
}
fclose(file);
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7599瀏覽量
136218 -
編程
+關注
關注
88文章
3595瀏覽量
93601 -
文件操作
+關注
關注
0文章
7瀏覽量
5339
發布評論請先 登錄
相關推薦
multisim練習題
大家有沒有multisim的練習題目和教程啊?想學這方面的知識,還望各位大神幫幫忙!小弟實在感激不盡!有的話麻煩發到我的郵箱1400769604@qq.com謝謝了。
發表于 10-13 00:51
評論