
vc6下MFC通过点击菜单项d出对话框: 1、新建MFC工程,在资源中新建一个对话框,右击建立类向导,为对话框新建一个类 2、在view类中建立点击菜单项的响应函数 3、在响应函数中建立对话框的对象,调用DoModal函数d出对话框 view类cpp中要include对话框类的头文件 不会的话,联系我qq:342135961,我发给你代码 建议你看孙鑫的MFC视频,入手很快
给你个最最简单的MFC程序。你可以打开2005
新建win32
程序
建立空项目
然后编写如下代码//hellocpp
#include
<afxwinh>
//
说明应用程序类
class
CHelloApp
:
public
CWinApp
{
public:
virtual
BOOL
InitInstance();
};
//
建立应用程序类的实例
CHelloApp
HelloApp;
//
说明主窗口类
class
CHelloWindow
:
public
CFrameWnd
{
CStatic
cs;
public:
CHelloWindow();
};
//
每当应用程序首次执行时都要调用的初始化函数
BOOL
CHelloApp::InitInstance()
{
m_pMainWnd
=
new
CHelloWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return
TRUE;
}
//
窗口类的构造函数
CHelloWindow::CHelloWindow()
{
//
建立窗口本身
Create(NULL,
"Hello
World!",
WS_OVERLAPPEDWINDOW,
CRect(0,0,200,200));
//
建立静态标签
cs
=
new
CStatic();
cs->Create("hello
world",
WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(50,80,150,150),
this);
}
这样就出来了。
>
楼主你好这是我的专周做的我也是大一的你可以稍加修改就好很适合大一的
#include <stdioh>
#include <conioh>
#include <stringh> //包含使用strcmp的头文件
#include "baohanh"
void main()
{
int chg=1,n;
printf("\t\t欢迎使用本管理系统,为了您的正常使用请在Debug下使用\n");
while(chg)
{
Menu();
scanf("%d",&n);
switch(n)
{
case 1:
Infobase(); //信息维护
break;
case 2:
Find(); //信息查询
break;
case 3:
InfoStat(); //成绩统计
break;
case 4:
Comp();
break; //成绩排序
case 0:
chg=0; //退出菜单
printf("谢谢使用!再见\n");
break;
default:
printf("选择错误(0~4)请重新输入\n");
}
}
getch();
}
/主菜单画面/
void Menu()
{
printf("\t\t\t\n");
printf("\t\t\t \n");
printf("\t\t\t 主菜单 \n");
printf("\t\t\t \n");
printf("\t\t\t\n");
printf("\t\t\t 1 信息维护\n");
printf("\t\t\t 2 信息查询\n");
printf("\t\t\t 3 成绩统计\n");
printf("\t\t\t 4 成绩排序\n");
printf("\t\t\t 0 退出菜单\n");
}
/信息维护/
void Infobase()
{
int n,chg=1;
while(chg)
{
printf("\t\t\t1 录入学生信息\n");
printf("\t\t\t2 修改学生信息\n");
printf("\t\t\t3 删除学生信息\n");
printf("\t\t\t0 回到主菜单\n");
scanf("%d",&n);
switch(n)
{
case 1:
Infobase_add(); //录入信息
break;
case 2:
Infobase_amend(); //修改信息
break;
case 3:
Delete(); //删除信息
case 0:
chg=0; //退回主菜单
break;
default :
printf("\t选择错误请重新输入\n:");
}
}
}
/录入信息/
void Infobase_add()
{
Student stu[1]; //定义Student型数组变量
FILE fp=NULL; //声明文件指针
fp=fopen("专周txt","a"); //以追加方式打开
printf("\t输入姓名 性别 学号 成绩(数学 外语 C语言)\n");
scanf("%s%s%d%d%d%d", //接收输入
stu[0]name,
stu[0]sex,
&stu[0]ID,
&stu[0]math,
&stu[0]english,
&stu[0]computer_C);
stu[0]sum=stu[0]english+stu[0]computer_C+stu[0]math;//计算总分
if(fprintf(fp," %s %s %d %d %d %d %d \n",//写入磁盘防错处理
stu[0]name,
stu[0]sex,
stu[0]ID,
stu[0]math,
stu[0]english,
stu[0]computer_C,
stu[0]sum)==0)
{
printf("写入失败");
}
fclose(fp); //关闭文件指针
}
/修改信息/
void Infobase_amend()
{
int i,j;
char ch[10]; //声明字符数组以保存需修改的姓名
Student stu[50]; //声明Student型数组
FILE fp=NULL; //声明文件指针
printf("\t输入需修改学生的名字");//提示输入
scanf("%s",ch); //接收输入姓名
fp=fopen("专周txt","rt+"); //以可读写方式打开
for(i=0;;i++)
{
fscanf(fp," %s %s %d %d %d %d %d ",//从磁盘读入内存
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum);
if(strcmp(stu[i]name,ch)==0) //判断是否查找所需
{
rewind(fp); //指针移到文件开头
printf("\t输入修改姓名 性别 学号 成绩(数学 外语 C语言)\n");
scanf("%s%s%d%d%d%d", //接收输入
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C);
j=i;
stu[i]sum=stu[i]english+stu[i]computer_C+stu[i]math;
for(i=0;i<j;i++)
{
fprintf(fp," %s %s %d %d %d %d %d \n",//原数据写入磁盘
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum);
}
fprintf(fp," %s %s %d %d %d %d %d ",//将修改数据写入磁盘
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum);
fclose(fp); //关闭文件指针
break;
}
}
}
/删除信息/
void Delete()
{
int i,j,k=0;
char ch[10]; //声明字符数组以保存需删除的姓名
Student stu[50]; //声明Student型数组
FILE fp=NULL,fp1=NULL; //声明文件指针
printf("\t输入需删除学生的名字"); //提示输入
scanf("%s",ch); //接收输入姓名
fp=fopen("专周txt","rt+"); //以可读写方式打开
for(i=0;!feof(fp);i++)
{
fscanf(fp," %s %s %d %d %d %d %d ",//从磁盘读入内存
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum);
if(strcmp(stu[i]name,ch)==0) //判断是否查找所需
j=i;
}
rewind(fp); //指针移动到开头
for(;j<i-1;j++)
{
stu[j]=stu[j+1]; //覆盖需删除的后依次前移
}
for(i=0;i<j;i++)
fprintf(fp," %s %s %d %d %d %d %d \n", //写入磁盘
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum);
}
fclose(fp);
/信息查询/
void Find()
{
int n,chg=1; //声明chg变量用以循环
while(chg)
{
printf("\t\t\t1 按学号查询\n");
printf("\t\t\t2 按姓名查询\n");
printf("\t\t\t0 退回主菜单\n");
scanf("%d",&n);
switch(n)
{
case 1:
Find_ID(); //调用以学号查找的函数
break;
case 2:
Find_name(); //调用以姓名查找的函数
break;
case 0:
chg=0; //退回主菜单
break;
default :printf("\n选择错误请重新输入\n");
}
}
}
/按学号查找/
void Find_ID()
{
int n,i;
Student stu[50]; //声明Student型数组变量
FILE fp=NULL; //声明文件指针
printf("请输入学号"); //提示接收输入
scanf("%d",&n); //接收输入学号
fp=fopen("专周txt","rt"); //以只读方式打开
for(i=0;!feof(fp);i++)
{
if(fscanf(fp," %s %s %d %d %d %d %d \n", //防止读入内存失败
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum)==0)
printf("读取失败");
if(stu[i]ID==n) //判断是否需查找学生
{
printf("查找到:%s 性别%s 学号%d 数学%d 外语%d C语言%d 总分%d\n",//输出查找目标
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum);
break;
}
if(feof(fp)) //处理未找到情况
{
printf("无此学生信息\n");
}
}fclose(fp); //关闭文件指针
}
/按姓名查找/
void Find_name()
{
int i;
char ch[10]; //声明字符数组以储存查找姓名
Student stu[50]; //声明Student型数组变量
FILE fp=NULL; //声明文件指针
printf("请输入姓名\n"); //提示输入
scanf("%s",ch); //接收输入姓名
fp=fopen("专周txt","rt"); //以只读方式打开
for(i=0;!feof(fp);i++) //循环,以文件指针到末尾结束循环
{
fscanf(fp," %s %s %d %d %d %d %d ",//从磁盘读入内存
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum);
if(strcmp(stu[i]name,ch)==0) //判断是否查找学生
{
printf("查找到:%s 性别%s 学号%d 数学%d 外语%d C语言%d 总分%d\n",//输出查找目标
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum);
break;
}
if(feof(fp)) //处理未找到情况
{
printf("无此学生信息\n");
}
}fclose(fp); //关闭文件指针
}
/信息统计/
void InfoStat()
{
int n,m,i,count=0;
char ch[15]; //声明字符数组保存课程名
Student stu[60]; //声明Student型数组变量
FILE fp=NULL; //声明文件指针
fp=fopen("专周txt","rt"); //以只读方式打开
printf("输入课程名(数学 外语 C)和分数段(格式:数学 x1-x2)\n");
scanf("%s",ch); //接收输入课程名
scanf("%d-%d",&n,&m); //接收输入分数段
for(i=0;!feof(fp);i++) //以文件指针到文件末尾结束循环
{
if(fscanf(fp," %s %s %d %d %d %d %d \n", //防止读入内存失败
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum)==0)
printf("读取失败");
count++;
}
fclose(fp); //关闭文件指针
/以下输出查找目标/
printf("姓名 性别 %s 总分\n",ch);
for(i=0;i<count;i++)
if(strcmp(ch,"数学")==0 && stu[i]math>=n && stu[i]math<=m)
{
printf("%s\t%s\t%d\t%d\n",
stu[i]name,
stu[i]sex,
stu[i]math,
stu[i]sum);
}
for(i=0;i<count;i++)
if(strcmp(ch,"外语")==0 && stu[i]english>=n && stu[i]english<=m)
{
printf("%s\t%s\t%d\t%d\n",
stu[i]name,
stu[i]sex,
stu[i]english,
stu[i]sum);
}
for(i=0;i<count;i++)
if(!strcmp(ch,"C") && stu[i]computer_C>=n && stu[i]computer_C<=m)
{
printf("%s\t%s\t%d\t%d\n",
stu[i]name,
stu[i]sex,
stu[i]english,
stu[i]sum);
}
}
/成绩排序/
void Comp()
{
int i,k,j,count=0;
char ch[15]; //声明字符数组保存课程名
Student stu[50],temp; //声明Student型变量
FILE fp=NULL; //声明文件指针
printf("请输入需要排序的课程名"); //提示输入
scanf("%s",ch); //接收输入的课程名
fp=fopen("专周txt","rt"); //以读方式打开文件
for(i=0;!feof(fp);i++) //以文件指针到末尾结束循环
{
if(fscanf(fp," %s %s %d %d %d %d %d \n", //防止读入内存失败
stu[i]name,
stu[i]sex,
&stu[i]ID,
&stu[i]math,
&stu[i]english,
&stu[i]computer_C,
&stu[i]sum)==0)
printf("读取失败");
count++; //记录文件内学生人数
}
fclose(fp); //关闭文件指针
if(strcmp(ch,"数学")==0)
{
for(i=0;i<count-1;i++) //以下为以降序顺序排序
{
k=i;
for(j=i+1;j<count;j++)
if(stu[k]math<stu[j]math)
k=j;
if(i!=k)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
printf("姓名 性别 学号 数学 外语 C语言 总分 数学成绩名次\n");
for(i=0;i<count;i++)
{
printf("%-6s %4s %d %d %d %d %d %d\n", //输出信息
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum,i+1);
}
}
if(strcmp(ch,"外语")==0)
{
for(i=0;i<count-1;i++) //以下为降序顺序排序
{
k=i;
for(j=i+1;j<count;j++)
if(stu[k]english<stu[j]english)
k=j;
if(i!=k)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
printf("姓名 性别 学号 数学 外语 C语言 总分 外语成绩名次\n");
for(i=0;i<count;i++)
{
printf("%-6s %4s %d %d %d %d %d %d\n", //输出信息
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum,i+1);
}
}
if(strcmp(ch,"C")==0)
{
for(i=0;i<count-1;i++) //以下为降序顺序排序
{
k=i;
for(j=i+1;j<count;j++)
if(stu[k]computer_C<stu[j]computer_C)
k=j;
if(i!=k)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
printf("姓名 性别 学号 数学 外语 C语言 总分 C语言成绩名次\n");
for(i=0;i<count;i++)
{
printf("%-6s %4s %d %d %d %d %d %d\n", //输出信息
stu[i]name,
stu[i]sex,
stu[i]ID,
stu[i]math,
stu[i]english,
stu[i]computer_C,
stu[i]sum,i+1);
}
}
}以下是baohan头文件
void Menu(); //主菜单
void Infobase(); //信息维护
void Find(); //信息查询
void InfoStat(); //成绩统计
void Comp(); //成绩排序
void Find_ID(); //以学号查找
void Find_name(); //以姓名查找
void Infobase_add(); //录入信息
void Infobase_amend(); //修改信息
void Delete(); //删除信息
typedef struct //重命名学生信息结构体
{
char name[10]; //姓名
char sex[3]; //性别
int ID; //学号
int math; //数学成绩
int english; //英语成绩
int computer_C; //计算机C语言成绩
int sum; //成绩总和
}Student;
用个定时器(WM_TIMER消息),button的响应:SetTimer(0,
2601000,
NULL);
不用了就killTimer(0);
在OnTimer(UINT
nIDEvent)里实现要做的事情。
也可以用
线程
,不过用定时器最方便
你先按一下就开始计时,每两分钟相应一次。SetTimer里0,事件号,2601000是时间间隔(毫秒),后面那个直接写NULL,具体什么我也忘了,可以查一下。
OnTimer(UINT
nIDEvent)
{
if
(nIDEvent
==
0)//对应事件号
AfxMessageBox("两分钟了");
CDialog::OnTimer(nIDEvent);
}
KillTimer(0);
0,事件号,关闭
计时器
void CTectCreateFileView::OnDraw(CDC pDC)
{
CTectCreateFileDoc pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CFont font;
LOGFONT lf;
// Do something with the font just created
memset(&lf, 0, sizeof(LOGFONT)); // zero out structure
CFont def_font;
int y = 5;
for( int i = 8; i<28; )
{
lflfHeight = i; // request a 12-pixel-height font
strcpy(lflfFaceName, "宋体"); // request a face name "Arial"
VERIFY(fontCreateFontIndirect(&lf)); // create the font
def_font = pDC->SelectObject(&font);
CString strmsg;
strmsgFormat("这是%d号宋体",i);
pDC->TextOut(5, y,strmsg);
pDC->SelectObject(def_font);
fontDeleteObject();
i += 2;
y += lflfHeight;
}
}
在CView::OnDraw里画即可实现
给你一个作参考吧,很全面了,简单的进行一些调整就行
/////////////////////////////////////////////////////////////////////
///////////// Listh: 类的所有成员都在头文件里声明 //////////////////
/////////////////////////////////////////////////////////////////////
#include <iostreamh> // cin 及 cout
#include <malloch> // 用到申请内存函数 malloc() 和释放内存函数 free()
#include <stringh> // 字符串处理
#include <stdioh> // 文件 *** 作(读文件)
#include <stdlibh> // system("cls")
struct address /家庭地址/
{
char city[10]; /城市/
char town[10]; /县城/
char village[10]; /乡镇/
};
struct telephone /****/
{
char SJ[50]; /手机/
char JD[30]; /家庭电话/
char XD[30]; /学校电话/
};
struct person /个人信息/
{
char name[20]; /名字/
char sex[10] ; /性别/
char MZ[16]; /民族/
char GJ[17]; /国籍/
char XL[19]; /学历/
};
struct score //成绩
{
char num[20]; //学号
char english[20];
char chinese[20];
char math[20];
char physics[20];
};
typedef struct linknode //定义节点的类型
{
char address[100]; //地址
char birthday[100]; //出生日期
struct score sc; //成绩
struct person pe; //个人信息
struct telephone te; //****
bool flag;
struct linknode next;
}nodetype;
class List
{
nodetype head;
public:
List();
List::~List();
linknode creatlist(int); //创建链表
int listlen(); //返回链表长度
nodetype findnode(int); //通过查找序号返回节点的指针
nodetype find(char c[]); //通过查找姓名返回节点的指针
int find2(char c[]); //通过查找姓名返回节点的序号
nodetype insnode(int); //插入节点
void delnode(int); //删除节点
nodetype load(); //初始化:从外部读入数据
void readstr(FILE f,char string); //读行函数
bool check(char a, char b); //对比两个字符串是否相等
void help(); //显示帮助菜单
void editperson(nodetype); //编辑个人说明
void editscore(nodetype); //编辑学科成绩
void edittelephone(nodetype); //编辑****
void dispname(); //显示所有学生姓名
void dispnode(nodetype p); //显示一个学生的所有信息
void dispperson(nodetype); //显示一个学生的个人说明
void dispscore(nodetype); //显示一个学生的学科成绩
void disptelephone(nodetype); //显示一个学生的****
};
#include <iostreamh> // cin 及 cout
#include <stringh> // strcpy(): 字符串复制
#include <stdlibh> // system("cls")
#include <stdioh> // 文件 *** 作(写文件)
#include "listh" // 我们要创建类 List 的对象和节点指针,所以要把类的头文件包含进来
class Operater
{
List L1;
public:
void Loop(); //主循环
void display(); //显示菜单
};
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////// Listcpp : The body of the class List //////////////////////
/////////////////////////////////////////////////////////////////////////////////////
#include "listh"
List::List()
{
head = NULL;
}
bool List::check(char a, char b) //对比两个字符串是否相等
{
int i;
int j=strlen(b);
for(i=0; i<j; i++)
{
if(a==b)
{
a++;
b++;
}
else
return 0;
}
return 1;
}
nodetype List::creatlist (int n) //创建链表
{
nodetype h=NULL, s, t;
int i=1;
for(int j=0; j<n; j++)
{
if(i==1) //创建第一个节点
{
h=(nodetype)malloc(sizeof(nodetype));
h->next=NULL;
t=h;
}
else //创建其余节点
{
s=(nodetype)malloc(sizeof(nodetype));
s->next=NULL;
t->next=s;
t=s; //t 始终指向生成的单链表的最后一个节点
}
i++;
}
head=h;
return h;
}
/
nodetype List::creatlist (int n) //创建链表
{
nodetype h=NULL;
int i=1;
for(int j=0; j<n; j++)
{
h=insnode(0);
}
head=h;
return h;
}
/
void List::readstr(FILE f,char string)
{
do
{
//①: 先读入一行文本
fgets(string, 255, f); //fgets(): 从文件 f 读入长度为 255-1 的字符串
// 并存入到 string 中
} while ((string[0] == '/') || (string[0] == '\n'));
return;
}
nodetype List::load()
{
FILE fp;
nodetype p;
char c[255];
int num;
if((fp=fopen("studenttxt", "r"))==NULL)
{
cout<<"打开文件失败"<<endl;
return 0;
}
readstr(fp, c);
sscanf(c, "The Length Of Link: %d", &num); //获取链表长度
p=creatlist(num); //创建链表
for(int i=0; i<num; i++)
{
readstr(fp, c);
strcpy(p->address, c);
readstr(fp, c);
strcpy(p->birthday, c);
readstr(fp, c);
strcpy(p->scnum, c);
readstr(fp, c);
strcpy(p->scchinese, c);
readstr(fp, c);
strcpy(p->scenglish, c);
readstr(fp, c);
strcpy(p->scmath, c);
readstr(fp, c);
strcpy(p->scphysics, c);
readstr(fp, c);
strcpy(p->pename, c);
readstr(fp, c);
strcpy(p->pesex, c);
readstr(fp, c);
strcpy(p->peGJ, c);
readstr(fp, c);
strcpy(p->peMZ, c);
readstr(fp, c);
strcpy(p->peXL, c);
readstr(fp, c);
strcpy(p->teSJ, c);
readstr(fp, c);
strcpy(p->teJD, c);
readstr(fp, c);
strcpy(p->teXD, c);
p=p->next;
}
fclose(fp);
return p;
}
void List::dispnode(nodetype p) //显示一个学生的所有信息
{
if(p!=NULL)
{
dispperson(p);
dispscore(p);
disptelephone(p);
}
}
void List::dispname() //显示所有学生姓名
{
nodetype p=head;
cout<<"现有的学生: "<<endl;
if(p==NULL)
cout<<"没有任何学生数据"<<endl;
while(p!=NULL)
{
cout<<"姓名: "<<p->pename;
p=p->next;
}
}
int List::listlen() //返回链表长度
{
int i=0;
nodetype p=head;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
nodetype List::findnode (int i) //通过查找序号返回节点的指针
{
nodetype p=head;
int j=1;
if( i>listlen()||i<=0 ) // i 上溢或下溢
return NULL;
else
{
while( p!=NULL && j<i ) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return p;
}
}
nodetype List::find(char c[]) //通过查找姓名返回节点的指针
{
nodetype p=head;
int j=1;
strcat(c, "\n"); //从外部读入的字符串末尾都带了一个换行符
while( p!=NULL && !(check(c, p->pename))) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return p;
}
int List::find2(char c[]) //通过查找姓名返回节点的序号
{
nodetype p=head;
int j=1;
strcat(c, "\n"); //从外部读入的字符串末尾都带了一个换行符
while( p!=NULL && !(check(c, p->pename))) //查找第 i 个节点并由 p 指向该节点
{
j++;
p=p->next;
}
return j;
}
nodetype List::insnode(int i)
{
nodetype h=head, p, s;
s=(nodetype)malloc(sizeof(nodetype)); //创建节点 s
s->next=NULL;
if(i==0) //i=0 时 s 作为该单链表的第一个节点
{
s->next = h;
h=s; //重新定义头节点
}
else
{
p=findnode(i); //查找第 i 个节点,并由 p 指向该节点
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
else cout<<"输入的 i 值不正确"<<endl;
}
head=h;
return s;
}
void List::delnode(int i) //删除第 i 个节点
{
nodetype h=head, p=head, s;
int j=1;
if(i==1) //删除第一个节点
{
h=h->next;
free(p);
}
else
{
p=findnode(i-1); //查找第 i-1 个节点,并由 p 指向这个节点
if(p!=NULL && p->next!=NULL)
{
s=p->next; // s 指向要删除的节点
p->next=s->next;
free(s);
}
else
cout<<"输入的 i 值不正确"<<endl;
}
head=h;
}
void List::editperson(nodetype p)
{
char c[100];
cout<<"请输入姓名: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pename, c);
cout<<"请输入性别:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pesex, c);
cout<<"请输入生日(格式举例:1982-1-1): "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->birthday, c);
cout<<"请输入民族:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->peMZ, c);
cout<<"请输入国籍:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->peGJ, c);
cout<<"请输入学历:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->peXL, c);
cout<<"请输入家庭住址(例如:广西玉林市解放路11号"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->address, c);
cout<<"编辑个人信息完成!"<<endl;
dispperson(p);
}
void List::editscore(nodetype p)
{
char a[50];
cout<<"请输入学号: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->scnum, a);
cout<<"请输入大学语文成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->scchinese, a);
cout<<"请输入英语成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->scenglish, a);
cout<<"请输入数学成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->scmath, a);
cout<<"请输入物理成绩: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->scphysics, a);
cout<<"编辑学科成绩完成!"<<endl;
dispscore(p);
}
void List::edittelephone(nodetype p)
{
char c[50];
cout<<"请输入手机号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->teSJ, c);
cout<<"请输入家庭电话号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->teJD, c);
cout<<"请输入学校电话号码: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->teXD, c);
cout<<"编辑****完成!"<<endl;
disptelephone(p);
}
void List::dispperson(nodetype p)
{
cout<<"姓名: "<<p->pename;
cout<<"性别: "<<p->pesex;
cout<<"民族: "<<p->peMZ;
cout<<"国籍: "<<p->peGJ;
cout<<"学历: "<<p->peXL;
cout<<"出生日期: "<<p->birthday;
cout<<"家庭住址: "<<p->address;
}
void List::dispscore(nodetype p)
{
cout<<"学号: "<<p->scnum;
cout<<"大学语文成绩: "<<p->scchinese;
cout<<"英语成绩: "<<p->scenglish;
cout<<"数学成绩: "<<p->scmath;
cout<<"物理成绩: "<<p->scphysics;
}
void List::disptelephone(nodetype p)
{
cout<<"手机号码是: "<<p->teSJ;
cout<<"家庭电话是: "<<p->teJD;
cout<<"学校电话是: "<<p->teXD;
}
void List::help()
{
cout<<endl<<endl;
cout<<""<<endl;
cout<<"1: 编辑个人信息"<<endl;
cout<<"2: 编辑学科成绩"<<endl;
cout<<"3: 编辑****"<<endl;
cout<<"4: 显示个人信息"<<endl;
cout<<"5: 显示学科成绩"<<endl;
cout<<"6: 显示****"<<endl;
cout<<"7: 显示该学生所有信息"<<endl;
cout<<"8: 帮助菜单"<<endl;
cout<<"9: 返回上一级菜单"<<endl;
cout<<""<<endl;
}
List::~List()
{
nodetype pa=head, pb;
if(pa!=NULL)
{
pb=pa->next;
if(pb==NULL)
free(pa);
else
{
while(pb!=NULL)
{
free(pa);
pa=pb;
pb=pb->next;
}
free(pa);
}
}
}
#include "operaterh"
void Operater::display()
{
cout<<endl<<endl;
cout<<" 学生管理系统 "<<endl;
cout<<"1: 添加一个学生信息"<<endl;
cout<<"2: 删除一个学生信息"<<endl;
cout<<"3: 显示所有学生的姓名"<<endl;
cout<<"4: 根据姓名显示单个学生所有信息"<<endl;
cout<<"5: 根据姓名对单个学生进行编辑"<<endl;
cout<<"6: 帮助菜单"<<endl;
cout<<"7: 保存数据"<<endl;
cout<<"0: 退出系统"<<endl;
cout<<""<<endl;
}
void Operater::Loop()
{
List L1; //List 对象
char ch[20];
nodetype p, head;
int i; //存放节点序号
p=L1load(); //初始化:从外部读入数据创建链表
head=p;
display();
while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 6 ): "<<endl;
cin>>ch;
system("cls");
if(L1check(ch, "1"))
{
p=L1insnode(0);
head=p;
system("cls");
cout<<endl;
cout<<" 添加一个学生信息 "<<endl;
cout<<"下面输入个人信息: "<<endl;
L1editperson(p);
cout<<"下面输入学科成绩: "<<endl;
L1editscore(p);
cout<<"下面输入****: "<<endl;
L1edittelephone(p);
}
if(L1check(ch, "2"))
{
system("cls");
cout<<endl;
cout<<" 删除一个学生信息 "<<endl;
L1dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>ch;
i=L1find2(ch);
L1delnode(i);
}
if(L1check(ch, "3"))
{
system("cls");
cout<<endl;
cout<<" 显示所有学生姓名 "<<endl;
L1dispname();
}
if(L1check(ch, "4"))
{
system("cls");
cout<<endl;
cout<<" 根据姓名显示单个学生所有信息 "<<endl;
L1dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>ch;
p=L1find(ch);
L1dispnode(p);
}
if(L1check(ch, "6"))
{
display();
}
if(L1check(ch, "7")) //保存数据
{
FILE fp;
if((fp=fopen("studenttxt", "w"))==NULL)
{
cout<<"打开文件失败"<<endl;
return;
}
int i;
char t[255];
//将 L1listlen() 赋予字符串中的数字
sprintf(t, "The Length Of Link: %d\n", L1listlen());
fputs(t, fp);
strcpy(t, "\n");
fputs(t, fp);
p=L1findnode(1); //将链表头指针赋予 p
for(i=0; i<L1listlen(); i++)
{
fputs(p->address, fp); //输出地址
fputs(p->birthday, fp); //输出生日
fputs(p->scnum, fp); //输出学号
fputs(p->scchinese, fp); //输出语文成绩
fputs(p->scenglish, fp); //输出英语成绩
fputs(p->scmath, fp); //输出数学成绩
fputs(p->scphysics, fp); //输出物理成绩
fputs(p->pename, fp); //输出姓名
fputs(p->pesex, fp); //输出性别
fputs(p->peGJ, fp); //输出国籍
fputs(p->peMZ, fp); //输出民族
fputs(p->peXL, fp); //输出学历
fputs(p->teSJ, fp); //输出手机
fputs(p->teJD, fp); //输出家庭电话
fputs(p->teXD, fp); //输出学校电话
fputs(t, fp);
p=p->next;
}
p=head;
fclose(fp);
}
if(L1check(ch, "5"))
{
char c[20];
system("cls");
cout<<endl;
cout<<" 根据姓名对单个学生进行编辑 "<<endl;
L1dispname();
cout<<"请输入学生姓名: "<<endl;
cin>>c;
p=L1find(c);
system("cls");
cout<<endl<<endl;
cout<<""<<endl;
cout<<"1: 编辑个人信息"<<endl;
cout<<"2: 编辑学科成绩"<<endl;
cout<<"3: 编辑****"<<endl;
cout<<"4: 显示个人信息"<<endl;
cout<<"5: 显示学科成绩"<<endl;
cout<<"6: 显示****"<<endl;
cout<<"7: 显示该学生所有信息"<<endl;
cout<<"8: 帮助菜单"<<endl;
cout<<"9: 返回上一级菜单"<<endl;
cout<<""<<endl;
while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 8 ): "<<endl;
cin>>c;
system("cls");
if(L1check(c, "1"))
{
system("cls");
cout<<endl;
cout<<" 编辑个人信息 "<<endl;
L1editperson(p);
}
else if(L1check(c, "2"))
{
system("cls");
cout<<endl;
cout<<" 编辑学科成绩 "<<endl;
L1editscore(p);
}
else if(L1check(c, "3"))
{
system("cls");
cout<<endl;
cout<<" 编辑**** "<<endl;
L1edittelephone(p);
}
else if(L1check(c, "4"))
{
system("cls");
cout<<endl;
cout<<" 显示个人信息 "<<endl;
L1dispperson(p);
}
else if(L1check(c, "5"))
{
system("cls");
cout<<endl;
cout<<" 显示学科成绩 "<<endl;
L1dispscore(p);
}
else if(L1check(c, "6"))
{
system("cls");
cout<<endl;
cout<<" 显示**** "<<endl;
L1disptelephone(p);
}
else if(L1check(c, "7"))
{
system("cls");
L1dispnode(p);
}
else if(L1check(c, "8"))
{
system("cls");
L1help();
}
else if(L1check(c, "9"))
{
display();
break; //用 break 跳出本循环,不要用 return ,return 是退出程序
}
}
}
else if(L1check(ch, "0"))
return;
}
return;
}
#include "operaterh"
void main()
{
Operater O1;
O1Loop();
}
1、 文件名Apph (cpp)应用程序类
CMyApp的基类是CWinApp,而CWinApp的基类又是CWinThread,CWinThread类是用来完成对线程(见后面的名词解释)的控制,包括对线程的创建、运行、终止和挂起等。它实际上是Windows首先运行的内容,当这个程序开始时,它将会把主窗口放在屏幕上。C或C++是从main()主函数开始执行,而VC++是从WinMain()函数开始执行,且WinMain()函数就是隐含在此应用程序中
2、 CMainFrmh (cpp)主框架类
CMainFrm的基类是CFrameWnd,该类是显示主窗口,是我们找到菜单栏、窗口的标题栏以及工具栏的地方,主窗口对象负责窗口中出现的、围绕 *** 作领域的一切,如:图画、文本和其它图形,这个区域称为窗口中的客户区。它用于管理应用程序窗口显示如:标题栏、菜单栏、工具栏、状态栏、控制菜单、控制按钮等,它是所有MDI(多文档)和SDI(单文档)子窗口的包容器。
3、 文件名Viewh (cpp)视图类
CMyView的基类是CView,处理客户区,是我们在程序中设置数据格式及显示数据的位置,如我们在创建一个字处理程序时正在编辑的文本,事实上,视图对象是出现在客户区顶部的窗口本身,用于让用户通过窗口来访问文档、视图类。
4、 CMyDoch (cpp)文档类
CMyDoch (cpp)的基类是CDocument,为程序存储数据,将所有数据存在文档中,而在视图对象中处理并显示。它包含了应用程序在运行期间所用到的数据文档。
以上就是关于怎样用MFC编写一个对话框程序全部的内容,包括:怎样用MFC编写一个对话框程序、如何做一个简单的MFC程序、我是大一的学生 老师让我们做一个c语言课程设计 现在给出三道 希望大家 帮帮忙 编写一个工资管理的程序。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)