预备役结束啦!
虽然预备役结束了,我最终还是被pass掉了,但还是很开心,毕竟我在这期间也学到了很多东西,从开始的面试,对我来说就是一个挑战,那也是我第一次面试,尽管做的不是很好,但至少我尝试过了,这让我以后面试就没那么害怕了。然后在预备役期间,题组就开了三组,但都是针对某个知识或者算法开的,像开的结构体题组相当于帮我复习了一遍结构体的使用,字符串组的话就是对字符串的各种操作,这个需要灵活变通,最主要的就是栈组了,刷完之后对栈的简单使用还是都会了,用c写就比较麻烦,就知道了c++里有直接对栈的操作的函数,学会了之后方便多啦。然后预备役做的项目是简单通讯录,听名字确实也挺简单的,基本功能健全,主要就是对链表跟文件的操作,写这个也是一种复习吧,还学了一个模糊查找,在对文件读写写入的时候出现了几个bug,因为对文件的操作有很多细节的问题,找了几天才把这个小问题解决,那下次写其它用到文件操作的时候就不会放这种错误了。答辩其实挺失败的,但没关系,总是要在失败中积累经验嘛,好好学习才是重点,在哪学都一样,我个人认为。
这是简单通讯录的代码:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include<windows.h>
#define node (struct list*)malloc(sizeof(struct list))//宏定义开辟节点替换
/* 链表
文件操作
函数
结构体
模糊查找
*/
//通讯录包括姓名,性别,电话号码,家庭住址,工作(学习)单位
typedef struct list {
char name[50];
char sex[5];
char tel[50];
char address[100];
char work[100];
struct list *next;
} P;
//函数声明
P *Filelr();
P *add(P *head);
P *upd(P* head);
int findname(char *str1,char *str2);
P *find(P* head);
P *save(P *head,int flag);
P *print(P *head);
P *clear(P *head);
P *sum(P *head);
FILE *fp;
// 把文件内的信息地址存入,建立链表
P *Filelr() {
P *p1,*p2,*head,*p;
fp=fopen("D:\\book.txt","r+");
rewind(fp);//光标移到文件开头
p1=node;
p1->next=NULL;
if(fscanf(fp,"%s %s %s %s %s\n",p1->name,p1->sex,p1->tel,p1->address,p1->work)==EOF) return head=NULL;
else {
rewind(fp);
head=p1;
while(!feof(fp)) {
fscanf(fp,"%s %s %s %s %s\n",p1->name,p1->sex,p1->tel,p1->address,p1->work);
if(feof(fp)!=0) break;
p2=p1;
p1=node;
p2->next=p1;
p1->next=NULL;
}
}
fclose(fp);
return head;
}
// 新增联系人,建立在链表末尾
P *add(P *head) {
P *p,*p1,*p2;
fp=fopen("D:\\book.txt","a+");
p=node;
printf("请输入您需要添加的用户信息:\n");
printf("请输入用户姓名:");
scanf("%s",p->name);
fprintf(fp,"%s ",p->name);
printf("请输入用户性别:");
scanf("%s",p->sex);
fprintf(fp,"%s ",p->sex);
printf("请输入用户电话号码:");
scanf("%s",p->tel);
fprintf(fp,"%s ",p->tel);
printf("请输入用户家庭住址:");
scanf("%s",p->address);
fprintf(fp,"%s ",p->address);
printf("请输入用户工作(学习)单位:");
scanf("%s",p->work);
fprintf(fp,"%s\n",p->work);
if(head==NULL) {
head=p;
p->next=NULL;
} else {
p1=p2=head;
while(p1!=NULL) {
p2 = p1;
p1=p1->next;
}
p2->next=p;
p->next=NULL;
}
printf("您已成功添加该用户!\n");
getchar();
getchar();
fclose(fp);
return head;
}
//删除想要删除的联系人,从链表中删除,文件全覆盖
P *del(P *head) {
P *p1,*p2;
int flag=0;
char name[50];
fp=fopen("D:\\book.txt","w");
p1=p2=head;
printf("请您输入需要删除的用户姓名:\n");
scanf("%s",name);
if(head!=NULL) {
while(p1!=NULL) {
if(strcmp(p1->name,name)==0) {
if(head!=p1) p2->next=p1->next;
else head=p1->next;
free(p1);
printf("您已成功删除该用户!\n");
flag=1;
break;
} else {
p2=p1;
p1=p1->next;
}
}
if(flag==0) printf("当前通讯录查无此人!\n");
else
{
p1=head;
while(p1!=NULL) {
fprintf(fp,"%s %s %s %s %s\n",p1->name,p1->sex,p1->tel,p1->address,p1->work);
p1=p1->next;
}
fclose(fp);
}
} else printf("当前通讯录无用户!\n");
getchar();
getchar();
return head;
}
//修改用户信息,查找是否相等,想等进行修改,对文件进行全覆盖
P *upd(P* head) {
P *p1, *p2;
int flag=0;
fp=fopen("D:\\book.txt","w");
char name[50];
p2=p1=head;
printf("请您输入需要修改的用户姓名:\n");
scanf("%s",name);
if(head!=NULL) {
while(p1!=NULL) {
if(strcmp(p1->name,name)==0) {
printf("请您根据提示修改用户信息:\n");
printf("将姓名(%s)修改为:",p1->name);
scanf("%s",p1->name);
printf("将性别(%s)修改为:",p1->sex);
scanf("%s",p1->sex);
printf("将电话号码(%s)修改为:",p1->tel);
scanf("%s",p1->tel);
printf("将家庭住址(%s)修改为:",p1->address);
scanf("%s",p1->address);
printf("将工作(学习)单位(%s)修改为:",p1->work);
scanf("%s",p1->work);
printf("您已成功修改该用户!\n");
flag=1;
break;
} else {
p2=p1;
p1=p1->next;
}
}
if(flag==0) printf("当前通讯录查无此人!\n");
else
{
p1=head;
while(p1!=NULL) {
fprintf(fp,"%s %s %s %s %s\n",p1->name,p1->sex,p1->tel,p1->address,p1->work);
p1=p1->next;
}
}
} else printf("当前通讯录无信息!\n");
fclose(fp);
getchar();
getchar();
return head;
}
int findname(char *s1,char *s2)//模糊查找
{
char *st;
while(*s1!='\0')
{
while(*s1!='\0'&&*s1!=*s2)
s1++;
st=s2;
while(*s1!='\0'&&*st!='\0')
{
if(*st!=*s1) break;
st++;
s1++;
}
if(*st=='\0') return 1;
}
return 0;
}
// 查询用户信息
P *find(P* head) {
P *p1,*p2;
int flag=0;
char name[50];
p2=p1=head;
printf("请您输入需要查找的用户姓名:\n");
scanf("%s",name);
if(head!=NULL) {
while(p1!=NULL) {
if(findname(p1->name,name)==1) {
printf("以下是该用户信息:\n");
printf("姓名:%s ",p1->name);
printf("性别:%s ",p1->sex);
printf("电话号码:%s\n",p1->tel);
printf("家庭住址:%s ",p1->address);
printf("工作(学习)单位:%s ",p1->work);
printf("\n");
flag=1;
}
p2=p1;
p1=p1->next;
}
if(flag==0) printf("当前通讯录查无此人!\n");
} else printf("当前通讯录无数据!\n");
getchar();
getchar();
return head;
}
//保存链表中的用户数据到文件中
P *save(P *head) {
fp=fopen("D:\\book.txt","w");
rewind(fp);
P *p1;
p1=head;
if(head!=NULL) {
while(p1!=NULL) {
fprintf(fp,"%s %s %s %s %s\n",p1->name,p1->sex,p1->tel,p1->address,p1->work);
p1=p1->next;
}
printf("您已成功保存所有用户信息!\n");
} else {
printf("当前无用户保存!\n");
}
getchar();
getchar();
fclose(fp);
return head;
}
//预览整个通讯录
P *print(P *head) {
P *p;
p=head;
if(head!=NULL) {
printf("现有通讯录列表:\n");
while(p!=NULL) {
printf("姓名:%s ",p->name);
printf("性别:%s ",p->sex);
printf("电话号码:%s\n",p->tel);
printf("家庭住址:%s ",p->address);
printf("工作(学习)单位:%s \n",p->work);
p=p->next;
}
} else {
printf("目前通讯录无用户信息!\n");
}
getchar();
getchar();
return head;
}
//清除整个通讯录
P *clear(P *head) {
fp=fopen("D:\\book.txt","w");
printf("您已成功清除通讯录所有信息!\n");
getchar();
getchar();
fclose(fp);
return head=NULL;
}
//计算通讯录中的用户个数
P *sum(P *head) {
P *p1;
int count=0;
p1=head;
if(head!=NULL) {
while(p1!=NULL) {
count++;
p1=p1->next;
}
printf("当前通讯录中包含%d个用户!\n",count);
} else {
printf("当前通讯录中无用户!\n");
}
getchar();
getchar();
return head;
}
//菜单页面
int initPrint() {
printf("==============================================================\n");
printf(" 0.退出系统 \n");
printf(" 1.新增通讯录 \n");
printf(" 2.删除通讯录 \n");
printf(" 3.修改通讯录 \n");
printf(" 4.查询详细信息 \n");
printf(" 5.保存数据 \n");
printf(" 6.预览信息 \n");
printf(" 7.清除通讯录 \n");
printf(" 8.统计通讯录 \n");
//printf(" 9.清屏 \n");
printf("==============================================================\n");
printf("请选择您要进行的操作(0---8):\n");
int x;
scanf("%d",&x);
while(x!=0&&x!=1&&x!=2&&x!=3&&x!=4&&x!=5&&x!=6&&x!=7&&x!=8)
{
printf("您的选择不合法,请重新输入:\n");
scanf("%d",&x);
}
return x;
}
void firstpage1()//小方块
{
SetConsoleTitle("欢迎进入简单通讯录系统");//设置当前控制台窗口的标题
//消息框没有所有者窗口,要显示的消息,对话框标题,有一个确认按钮在里面
IDYES==MessageBox(NULL,"欢迎进入简单通讯录系统","苒意服务",MB_OK);
}
//结束页面
void endpage()
{
system("cls");
printf("========================简单通讯录系统========================\n\n");
printf(" ======== 您已成功退出! ========\n\n");
printf("==============================================================\n\n");
}
//主函数
int main() {
P *head;
system("color f0");//设置颜色
firstpage1();//设计小窗口
head=Filelr();//读取文件
while(1) {
system("cls");//清屏
int number=initPrint();//进入页面进行选择
if(number==0) {
endpage();//退出
break;
} else {
switch(number) {
case 1:
head=add(head);//新增
break;
case 2:
head=del(head);//删除
break;
case 3:
head=upd(head);//修改
break;
case 4:
head=find(head);//查找
break;
case 5:
head=save(head);//保存
break;
case 6:
head=print(head);//预览
break;
case 7:
head=clear(head);//清除
break;
case 8:
head=sum(head);//统计
break;
}
}
}
}
继续加油!按时学习。
今天
8:00~9:40高数课
9:40~11:50图书馆
2:30~4:10 c程序设计
4:30~18:00体育课测试
7:00~8:00 选修
8点之后面试,面试结束后回来考试(实验室安全规则,网课),写总结
一·、去图书馆的意义在于恶补高数,因为基础比较差,上这个课听懂有点难,然后需要时间预习,听课,在写题,所以每次高数课下课之后我都会在学习一遍。接下来将是高数的日子。
二、c程序设计这个课老师在讲指针,我认真听了一下,还刷了两个简单的栈题,主要是对那几个函数的使用,都是用c++写的,觉得很有意思。
这是其中一个题:
输入格式
输入包含多组测试数据。
每组数据,第一行包含一个整数?nn。
接下来?nn?行,每行的第一个字符可能是?P ?或者?O ?或者?A ;如果是?P ,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是?O ,表示将栈顶的值?pop ?出来,如果堆栈中没有元素时,忽略本次操作;如果是?A ,表示询问当前栈顶的值,如果当时栈为空,则输出?E 。
堆栈开始为空。
当输入一行为?n=0n=0?时,表示输入结束。
输出格式
对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的?A ?操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出?E 。
当每组测试数据完成后,输出一个空行。
数据范围
每个输入最多包含?1010?组数据。 1≤n≤1041≤n≤104。 栈中元素取值范围?[1,10000][1,10000]。
输入样例:
3
A
P 5
A
4
P 3
P 6
O
A
0
输出样例:
E
5
3
AC代码:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> st;
int n,x;
char c;
while(cin>>n,n!=0)
{
getchar();
for(int i=0;i<n;i++)
{
cin>>c;
if(c=='A')
{
if(st.empty()) cout<<'E'<<endl;
else cout<<st.top()<<endl;
}
if(c=='P')
{
cin>>x;
st.push(x);
}
if(c=='O')
{
if(!st.empty())
st.pop();
}
}
cout<<endl;
}
return 0;
}
三、选修时间补长,我在写高数的题目,(高数老师应该很感动,我选修都还在学它的科目)。
四、最后就是面试了,还是有一丝丝紧张,面试也很短,学长也没问什么。然后回来就开始搞那个实验室安全考试,几百个题,写了很久。还有网课的期末考试,也顺便完成了。
忙碌的一整天结束了,明天又是新的一天。加油苒意!
?
明日计划:
早上满课。
下午图书馆见,不出意外,写高数题,刷知识点的相关题目。
晚上晚自习,刷知识点的相关题目,要把那些知识用烂。
|