Ubuntu下Codeblocks+wxWidgets编程,学生公寓管理系统,基于窗体(使用wxFormbuilder拉取控件)。C++,sqlite3

/***************************************************************
 *
Name:      StuManaMain.cpp
 * Purpose:
  Code for Application Frame
 * Author:  
 Zhangaihua (62*********@qq.com)
 * Created:  
2014-05-20
 * Copyright: Zhangaihua
()
 *
License:
 **************************************************************/
#ifdef
WX_PRECOMP
#include
"wx_pch.h"
#endif
#ifdef
__BORLANDC__
#pragma hdrstop
#endif
//__BORLANDC__
#include
"StuManaMain.h"
#include<sqlite3.h>
//helper
functions
enum wxbuildinfoformat {
   
short_f, long_f };

wxString
wxbuildinfo(wxbuildinfoformat format)
{
 
  wxString wxbuild(wxVERSION_STRING);

   
if (format == long_f )
    {
#if
defined(__WXMSW__)
        wxbuild <<
_T("-Windows");
#elif defined(__WXMAC__)
 
      wxbuild << _T("-Mac");
#elif
defined(__UNIX__)
        wxbuild <<
_T("-Linux");
#endif

#if
wxUSE_UNICODE
        wxbuild <<
_T("-Unicode build");
#else
     
  wxbuild << _T("-ANSI build");
#endif //
wxUSE_UNICODE
    }

 
  return
wxbuild;
}

StuManaFrame::StuManaFrame(wxFrame
*frame)
    :
GUIFrame(frame)
{
#if
wxUSE_STATUSBAR
   
statusBar->SetStatusText(_("Hello Code::Blocks user!"),
0);
   
statusBar->SetStatusText(wxbuildinfo(short_f),
1);
#endif
}

StuManaFrame::~StuManaFrame()
{
}

void
StuManaFrame::OnClose(wxCloseEvent
&event)
{
   
Destroy();
}

void
StuManaFrame::OnQuit(wxCommandEvent
&event)
{
   
Destroy();
}

void
StuManaFrame::OnAbout(wxCommandEvent
&event)
{
    wxString msg =
wxbuildinfo(long_f);
//    wxMessageBox(msg,
_("Welcome to..."));
}
void
StuManaFrame::OnAdd(wxCommandEvent
&event)
{
   //add student‘s
dormitory infomation
    sqlite3
*db=NULL;
int flag;
    char
*errmsg;
flag =
sqlite3_open("./stuinfo.db",&db);
if(SQLITE_OK !=
flag)
{
       
wxLogMessage("Database connect
failed!");
exit(-1);
}
 
  char id[20], name[20], dorid[20], phone[20],
qq[20],sex[10];
    strcpy(id,
m_id->GetValue().mb_str());
    strcpy(name,
m_name->GetValue().mb_str());
    strcpy(dorid,
m_dormitoryid->GetValue().mb_str());
   
strcpy(phone, m_phone->GetValue().mb_str());
   
strcpy(qq, m_qq->GetValue().mb_str());
   
strcpy(sex, m_sex->GetValue().mb_str());
   
if(strcmp("", id) == 1)
    {
 
     wxLogMessage("the stu‘s id can not be
null");
     
 return;
    }
   
 if(strcmp("", name) == 1)
   
{
       wxLogMessage("the stu‘s name can
not be null");
     
 return;
    }
    char
st[500];
    sprintf(st, "insert into stu values(‘%s‘,
‘%s‘, ‘%s‘, ‘%s‘, ‘%s‘,‘%s‘);",
       
    id, name, dorid, phone, qq,sex);
   
if(sqlite3_exec(db,st,NULL,NULL,&errmsg) !=
SQLITE_OK)
    {
     
  wxLogMessage("Error");
       
wxLogMessage(errmsg);
       
return;
    }
   
else
    {
       
wxLogMessage("add success!!");
       
wxString str="";
       
m_id->SetValue(str);
       
m_name->SetValue(str);
       
m_dormitoryid->SetValue(str);
       
m_phone->SetValue(str);
       
m_qq->SetValue(str);
       
m_sex->SetValue(str);
       
return;
    }
   
sqlite3_close(db);
}
void
StuManaFrame::OnDelete(wxCommandEvent
&event)
{
   //delete student‘s
dormitory infomation
    sqlite3
*db=NULL;
int flag;
    char
*errmsg;
    char stuid[20];
flag =
sqlite3_open("./stuinfo.db",&db);
if(SQLITE_OK !=
flag)
{
       
wxLogMessage("Database connect
failed!");
exit(-1);
}
 
  strcpy(stuid, m_deleteid->GetValue().mb_str());
 
  if(strcmp("", stuid) == 0)
   
{
       wxLogMessage("the stu‘s id deleted
can not be null");
     
 return;
    }
    char
sql1[500];
    sprintf(sql1,"select * from stu where
id = ‘%s‘;",stuid);
   
if(sqlite3_exec(db,sql1,NULL,NULL,&errmsg)!=SQLITE_OK)
 
  {
        wxLogMessage("Error!The
student not exists!\n");
       
return;

    }
   
    char *sql=sqlite3_mprintf("delete from stu where id
=‘%s‘;",stuid);
       
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=
SQLITE_OK)
        {
 
          wxLogMessage("Error");
 
          wxLogMessage(errmsg);
 
          return;
     
  }
        else
 
      {
           
wxLogMessage("delete success!!");
       
    wxString str="";
       
    m_deleteid->SetValue(str);
     
      return;
       
}
   
sqlite3_close(db);
}

void
StuManaFrame::OnModify(wxCommandEvent
&event)
{
   //modify student‘s
dormitory infomation
    sqlite3
*db=NULL;
int flag;
    char
*errmsg;
flag =
sqlite3_open("./stuinfo.db",&db);
if(SQLITE_OK !=
flag)
{
       
wxLogMessage("Database connect
failed!");
exit(-1);
}
char
modifyid[20], modifyname[20], modifydorid[20], modifyphone[20],
modifyqq[20],modifysex[10];
    strcpy(modifyid,
m_modifyid->GetValue().mb_str());
   
strcpy(modifyname, m_modifyname->GetValue().mb_str());
 
  strcpy(modifydorid,
m_modifydorid->GetValue().mb_str());
   
strcpy(modifyphone,
m_modifyphone->GetValue().mb_str());
   
strcpy(modifyqq, m_modifyqq->GetValue().mb_str());
 
  strcpy(modifysex,
m_modifysex->GetValue().mb_str());
   
if(strcmp("", modifyid) == 0)
   
{
       wxLogMessage("the stu‘s id can not
be null");
     
 return;
    }
    char
st[500];
    char *sql=sqlite3_mprintf("select
count(*) from stu where id=‘%s‘;",modifyid);
   
sqlite3_stmt *pstmt;
    sqlite3_prepare(db, sql,
strlen(sql), &pstmt, NULL);
   
sqlite3_step(pstmt);
    int
count=sqlite3_column_int(pstmt,0);
   
sqlite3_finalize(pstmt);
   
if(count<0)
    {
   
    wxLogMessage("the student not exist.\n");
 
      wxLogMessage(errmsg);
     
  return;
    }
   
sprintf(st, "update stu set name=‘%s‘,dormitoryid=‘%s‘, phone=‘%s‘,qq=‘%s‘,
sex=‘%s‘ where
id=‘%s‘;",modifyname,modifydorid,modifyphone,modifyqq,modifysex,modifyid);
 
  if(sqlite3_exec(db,st,NULL,NULL,&errmsg) !=
SQLITE_OK)
    {
     
  wxLogMessage("Error");
       
wxLogMessage(errmsg);
       
return;
    }
   
else
    {
       
wxLogMessage("modify success!");
       
wxString str="";
       
m_modifyid->SetValue(str);
       
m_modifyname->SetValue(str);
       
m_modifydorid->SetValue(str);
       
m_modifyphone->SetValue(str);
       
m_modifyqq->SetValue(str);
       
m_modifysex->SetValue(str);
       
return;
    }
   
sqlite3_close(db);
}
void
StuManaFrame::OnSearch(wxCommandEvent
&event)
{
   //search student‘s
dormitory infomation
    sqlite3
*db=NULL;
int flag;
    char
*errmsg;
    char **dbresult;
 
  int nrow,ncolumn;//search jilushu and ziduanshu
 
  int i,j,index;
flag =
sqlite3_open("./stuinfo.db",&db);
if(SQLITE_OK !=
flag)
{
       
wxLogMessage("Database connect
failed!");
exit(-1);
}
char
searchid[20],searchname[20];
    strcpy(searchid,
m_searchid->GetValue().mb_str());
   
strcpy(searchname, m_searchname->GetValue().mb_str());
 
  if(strcmp("", searchid) == 0 || strcmp("", searchid) ==
0)
    {
     
 wxLogMessage("the stu‘s search id and name can not be null at the same
time!");
     
 return;
    }
    char
*sql=sqlite3_mprintf("select * from stu where id =‘%s‘ or
name=‘%s‘;",searchid,searchname);
    wxString
str1;
   
if(sqlite3_get_table(db,sql,&dbresult,&nrow,&ncolumn,&errmsg) !=
SQLITE_OK)
    {
     
  wxLogMessage("Error");
       
wxLogMessage(errmsg);
       
return;
    }
   
else
    {
       
index=ncolumn;
       
for(i=0;i<nrow;i++)
       
{
           
for(j=0;j<ncolumn;j++)
         
  {
               
str1=str1+" \n"+dbresult[j]+":"+dbresult[index];
   
            ++index;
   
        }
         
  wxPuts("\n");

       
}
        wxLogMessage("The search result
is:\n%s.\n",str1);
       
sqlite3_free_table(dbresult);
       
wxString str="";
       
m_searchid->SetValue(str);
       
m_searchname->SetValue(str);
       
return;
    }
   
sqlite3_close(db);
}
void
StuManaFrame::OnExit(wxCommandEvent
&event)
{
   //exit the student
system
   
Destroy();
}

Ubuntu下Codeblocks+wxWidgets编程,学生公寓管理系统,基于窗体(使用wxFormbuilder拉取控件)。C++,sqlite3,布布扣,bubuko.com

时间: 2024-10-23 06:12:39

Ubuntu下Codeblocks+wxWidgets编程,学生公寓管理系统,基于窗体(使用wxFormbuilder拉取控件)。C++,sqlite3的相关文章

学生信息管理系统,Ubuntu下Codeblocks+wxWidgets编程

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

Ubuntu下的wxWidgets编程(学生信息管理写入文件,文件格式是.txt)

wxWidgets和Codeblocks的编译安装,GUI程序开发平台的搭建具体步骤如下: (1)基本编译环境安装 安装编译工具(gcc之类)sudo apt-get install build-essential 安装X11sudo apt-get install libx11-dev 安装GTK需要的东西sudo apt-get install?gnome-core-devel (2)下载wxWidgets源码包并解压缩到 #{wxdir} (3)创建基于gtk和x11的编译目录${wx}

基于SSH框架的学生公寓管理系统的质量属性

系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信息记录:包括宿舍楼号.宿舍号.电费信息.维修记录:3)报修信息记录:包括宿舍楼号.宿舍号.报修品.时间.维修状态:4)后勤人员记录:包括工号.姓名.联系方式:5)电费信息记录:包括宿舍楼号.宿舍号.电剩余量.使用量.缴费金额.剩余金额:6)学生晚归记录:晚归学生的学号.姓名.时间.宿舍号.日期.和原

ubuntu下搭建erlang编程环境

ubuntu下搭建erlang编程环境 - 阿杜的世界 - 博客频道 - CSDN.NET 吐槽:erlang作为一门小众语言,编程环境配置的我发疯啊,官方标配是emacs,但是我作为中毒已深的vimer实在不想换编辑器了,在尝试的途中我还试过了用eclipse的插件erlide,但是,当我耗掉很多人品,忍受了奇慢的网速装好之后,使用它编写erlang代码,然后运行...然后就卡死了死了:心里一万个草泥马翻滚啊. 前提:ubuntu 和  vim使用基本熟练(关于vim最近也有所收获,感觉终于可

Winform之学生信息管理系统登陆窗体

好吧,对这块的知识学习早已期待已久,感觉学习的进度还是慢了,最近一直在学习Winform,不得不说一些登陆窗体的设计,这几天算是小有收获,自己也看了许多这方面的知识,知道了要想做学生信息管理系统是一个漫长的过程,但是从今天起就来慢慢地进行学生信息管理系统的构建,此外还用到数据库的知识,打算着自己开始学数据库的知识,今天就来看看学生信息管理系统登录窗口的设计.下面图片的是样例: 这方面的知识还是基于C#语言和.NET Framework平台的.自己所用的还是熟悉的开发环境VS2012,感觉VS20

DevExpress的下拉框控件ComboxBoxEdit怎样绑定键值对选项

场景 DevExpress的下拉框控件ComboBoxEdit控件的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102855898 在设置ComboBoxEdit的下拉框内容时除了最简单的 comboBox.Properties.Items.Add("下拉选项1"); 如果要添加键值对形式的数据该怎样实现. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi

自定义下拉刷新控件

一.功能效果 1.在很多app中,在信息展示页面,当我们向下拖拽时,页面会加载最新的数据,并有一个短暂的提示控件出现,有些会有加载进度条,有些会记录加载日期.条目,有些还带有加载动画.其基本实现原理都相仿,本文中将探讨其实现原理,并封装出一个简单的下拉刷新控件 2.自定义刷新工具简单的示例 二.系统提供的下拉刷新工具 1.iOS6.0以后系统提供了自己的下拉刷新的控件:UIRefreshControl .例如,refreshControl,作为UITableViewController中的一个属

[Android]下拉刷新控件RefreshableView的实现

需求:自定义一个ViewGroup,实现可以下拉刷新的功能.下拉一定距离后(下拉时显示的界面可以自定义任何复杂的界面)释放手指可以回调刷新的功能,用户处理完刷新的内容后,可以调用方法onCompleteRefresh()通知刷新完毕,然后回归正常状态.效果如下:     源代码:RefreshableView(https://github.com/wangjiegulu/RefreshableView) 分析: 我们的目的是不管什么控件,只要在xml中外面包一层标签,那这个标签下面的所有子标签所

Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果, 最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout).记得刚开始实现这个效果的时候还是十分的得心印手.可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以 为是由于Re