當(dāng)前文章列出了4個(gè)文件編程相關(guān)的練習(xí)題。文件拷貝實(shí)現(xiàn)、 文件加密、學(xué)生管理系統(tǒng)鏈表模板(未添加文件操作)、學(xué)生管理系統(tǒng)模板(通過文件系統(tǒng)保存信息)、等4個(gè)例子。
1.1 文件拷貝實(shí)現(xiàn)
#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. 創(chuàng)建新文件*/
file_new=fopen("D:/456.pdf","wb");
if(file_new==NULL)
{
printf("新文件創(chuàng)建失敗!\n");
return -1;
}
/*3. 拷貝文件*/
while(!feof(file_src))
{
cnt=fread(buff,1,1024,file_src);
fwrite(buff,1,cnt,file_new);
}
/*4. 關(guān)閉文件*/
fclose(file_new);
fclose(file_src);
printf("文件拷貝成功!\n");
return 0;
}
1.2 文件加密
使用: 異或 ^
密碼類型: (1) 整型密碼 (2) 字符串密碼
比如: 銀行提款機(jī)的密碼、QQ密碼
加密代碼:
#include
#include
#include
int main()
{
/*1. 打開源文件*/
FILE *file_src;
FILE *file_new;
unsigned char buff[1024];
unsigned int cnt;
unsigned int password=123456; //密碼數(shù)據(jù)
unsigned int data; //存放讀取的數(shù)據(jù)
file_src=fopen("D:/123.pdf","rb");
if(file_src==NULL)
{
printf("源文件打開失敗!\n");
return -1;
}
/*2. 創(chuàng)建新文件*/
file_new=fopen("D:/456.pdf","wb");
if(file_new==NULL)
{
printf("新文件創(chuàng)建失敗!\n");
return -1;
}
/*3. 文件加密*/
while(!feof(file_src))
{
cnt=fread(&data,1,4,file_src);
data=data^password;//文件數(shù)據(jù)加密
fwrite(&data,1,cnt,file_new);
}
/*4. 關(guān)閉文件*/
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; //密碼數(shù)據(jù)
unsigned int data; //存放讀取的數(shù)據(jù)
file_src=fopen("D:/456.pdf","rb");
if(file_src==NULL)
{
printf("源文件打開失敗!\n");
return -1;
}
/*2. 創(chuàng)建新文件*/
file_new=fopen("D:/789.pdf","wb");
if(file_new==NULL)
{
printf("新文件創(chuàng)建失敗!\n");
return -1;
}
/*3. 文件加密*/
while(!feof(file_src))
{
cnt=fread(&data,1,4,file_src);
data=data^password;//文件數(shù)據(jù)加密
fwrite(&data,1,cnt,file_new);
}
/*4. 關(guān)閉文件*/
fclose(file_new);
fclose(file_src);
printf("文件解密成功!\n");
return 0;
}
1.3 學(xué)生管理系統(tǒng)鏈表模板(未添加文件操作)
#include
#include
#include
//存放信息的結(jié)構(gòu)體
struct MyStruct
{
char Name[50]; //存放姓名
int Number; //存放編號
struct MyStruct *next; //存放下一個(gè)節(jié)點(diǎn)的地址
};
//鏈表相關(guān)的函數(shù)接口
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);
//刪除節(jié)點(diǎn)
DeleteListInfo(ListHead,123);
DeleteListInfo(ListHead,789);
//打印
PrintListAllInfo(ListHead);
return 0;
}
/*
函數(shù)功能: 創(chuàng)建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
if(head==NULL)
{
head=malloc(sizeof(struct MyStruct));
head->next=NULL;
}
return head;
}
/*
函數(shù)功能: 在鏈表結(jié)尾添加節(jié)點(diǎn)
*/
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;
}
/*
函數(shù)功能: 根據(jù)結(jié)構(gòu)體里特有的成員區(qū)分進(jìn)行刪除鏈表節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe 編號
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
tmp=p; //保存上一個(gè)節(jié)點(diǎn)的信息
p=p->next;
if(p->Number==number)
{
tmp->next=tmp->next->next;
free(p);
p=head; //鏈表頭歸位
}
}
}
/*
函數(shù)功能: 打印所有節(jié)點(diǎn)信息
函數(shù)參數(shù): 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個(gè)節(jié)點(diǎn)信息: %s,%d\n",cnt,p->Name,p->Number);
}
}
1.4 學(xué)生管理系統(tǒng)模板(通過文件系統(tǒng)保存信息)
#include
#include
#include
//存放信息的結(jié)構(gòu)體
struct MyStruct
{
char Name[50]; //存放姓名
int Number; //存放編號
struct MyStruct *next; //存放下一個(gè)節(jié)點(diǎn)的地址
};
//鏈表相關(guān)的函數(shù)接口
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);
//文件操作相關(guān)函數(shù)
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);
//保存節(jié)點(diǎn)信息
SaveListAllInfo(ListHead,"D:/list.ini");
//打印
PrintListAllInfo(ListHead);
return 0;
}
#endif
#if 1
int main()
{
ListHead=CreateListHead(ListHead);
//獲取節(jié)點(diǎn)信息
GetListAllInfo(ListHead,"D:/list.ini");
//打印
PrintListAllInfo(ListHead);
return 0;
}
#endif
/*
函數(shù)功能: 創(chuàng)建鏈表頭
*/
struct MyStruct *CreateListHead(struct MyStruct *head)
{
if(head==NULL)
{
head=malloc(sizeof(struct MyStruct));
head->next=NULL;
}
return head;
}
/*
函數(shù)功能: 在鏈表結(jié)尾添加節(jié)點(diǎn)
*/
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;
}
/*
函數(shù)功能: 根據(jù)結(jié)構(gòu)體里特有的成員區(qū)分進(jìn)行刪除鏈表節(jié)點(diǎn)信息
函數(shù)參數(shù): int numbe 編號
*/
void DeleteListInfo(struct MyStruct *head,int number)
{
struct MyStruct *p=head;
struct MyStruct *tmp=NULL;
while(p->next!=NULL)
{
tmp=p; //保存上一個(gè)節(jié)點(diǎn)的信息
p=p->next;
if(p->Number==number)
{
tmp->next=tmp->next->next;
free(p);
p=head; //鏈表頭歸位
}
}
}
/*
函數(shù)功能: 打印所有節(jié)點(diǎn)信息
函數(shù)參數(shù): 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個(gè)節(jié)點(diǎn)信息: %s,%d\n",cnt,p->Name,p->Number);
}
}
/*
函數(shù)功能: 保存鏈表節(jié)點(diǎn)信息
*/
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);
}
/*
函數(shù)功能: 從文件里獲取鏈表節(jié)點(diǎn)信息
*/
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;
}
//循環(huán)讀取文件里的數(shù)據(jù)
while(!feof(file))
{
fread(&data,1,sizeof(struct MyStruct),file); //讀取鏈表節(jié)點(diǎn)數(shù)據(jù)
AddrListInfo(head,data); //添加鏈表節(jié)點(diǎn)
}
fclose(file);
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136863 -
編程
+關(guān)注
關(guān)注
88文章
3616瀏覽量
93740 -
文件操作
+關(guān)注
關(guān)注
0文章
7瀏覽量
5344
發(fā)布評論請先 登錄
相關(guān)推薦
multisim練習(xí)題
大家有沒有multisim的練習(xí)題目和教程?。肯雽W(xué)這方面的知識,還望各位大神幫幫忙!小弟實(shí)在感激不盡!有的話麻煩發(fā)到我的郵箱1400769604@qq.com謝謝了。
發(fā)表于 10-13 00:51
labview論壇-labview經(jīng)典基礎(chǔ)練習(xí)題+解答
labview論壇-labview經(jīng)典基礎(chǔ)練習(xí)題+解答
發(fā)表于 09-12 10:31
?648次下載
C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是C語言編程的經(jīng)典練習(xí)題資料免費(fèi)下載。
發(fā)表于 06-04 08:00
?16次下載
C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載
發(fā)表于 10-28 08:00
?15次下載
Python的練習(xí)題實(shí)例免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是Python的練習(xí)題實(shí)例免費(fèi)下載。
發(fā)表于 01-15 08:58
?17次下載
評論