简介网页版权和小程序源代码是一回事吗求一个c++小程序源代码,要求200行以上,给100分,能用再加100//=================================[说明]=======================================*///学生成绩管理//文件名:main.cpp//------!!!!!!---------BOF-[程序代码开始]-------------------#include#includeusing namespace std;//==========
网页版权和小程序源代码是一回事吗
求一个c++小程序源代码,要求200行以上,给100分,能用再加100
//=================================[说明]=======================================*///学生成绩管理//文件名:main.cpp//------!!!!!!---------BOF-[程序代码开始]-------------------#include#includeusing namespace std;//================================================================struct combox{ int num; int mark; string name; combox *next;};//================================================================//===========================================================//-----类体开始------------------------class Commonbox{private: combox *head; void Swap(combox *,combox *); //交换两个combox变量的数据域 void Print(combox *); //输出一combox指定的记录 combox *Find(int); //查找条例条件的记录,并返回该记录的指针public: Commonbox() { head=NULL; } int ListCount(); //统计当前链表的记录总数,返回一个整数 void AddItem(int num, string name, int mark); //添加一条记录到表尾 void RemoveItem(int); //删除一条指定的记橘链录 void List(); //列出当前链表中的所有记录 void Sort(); //对当前链表进行排序 void Search(int); //在当前链表查找指定记录并输出 float Average(); //计算平均成绩慎燃};//-----类体结束------------------------//-----类成员函数开始----------------------------------int Commonbox::ListCount() //统计当前链表的记录总数,返回一个整数{ if (! head)return 0; combox *p=head; int n=0; while (p) { n++; p=p->next; } return n;}void Commonbox::AddItem(int num, string name, int mark) //添加一宽伍虚条记录到表尾{ if (! head) { head=new combox; head->mark=mark; head->num=num; head->name=name; head->next=NULL; return; } combox *t=head; while (t && t->num!=num) t=t->next; if (t) { cout<<"操作失败:学号为"<<num<<"的记录已经存在!"<next)p=p->next; combox *p1=new combox; p1->num=num; p1->mark=mark; p1->name=name; p1->next=NULL; p->next=p1; return;}void Commonbox::RemoveItem(int num) //删除一条指定的记录{ combox *t=Find(num); if (! t)return; combox *p=head;//如果要删除的记录位于表头 if (head==t) { head=head->next; delete p; cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<next!=t)p=p->next; combox *p1=p->next; p->next=p1->next; delete p1; cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl; return;}void Commonbox::Print(combox *p) //输出一combox指定的记录{ cout<num<<"\t\t"; cout<name<<"\t\t"; cout<mark<<endl; return;}void Commonbox::List() //列出当前链表中的所有记录{ if (ListCount()==0) { cout <<"错误:当前的列表为空!"<<endl; return; } combox *p=head; cout<<"共有记录:"<<ListCount()<<endl; cout<<"学号\t\t姓名\t\t分数"<next; } cout <<endl; return;}void Commonbox::Search(int num) //在当前链表查找指定记录并输出{ cout <<"Searching...."<<endl; combox *p=Find(num); if (p) { cout<<"学号\t\t姓名\t\t分数"<<endl; Print(p); } cout <<endl;}combox *Commonbox::Find(int num){ if (ListCount()==0) { cout <<"错误:当前的列表为空!"<num==num)break; p=p->next; } if (! p) { cout <num=p1->num; temp->mark=p1->mark; temp->name=p1->name; p1->num=p2->num; p1->mark=p2->mark; p1->name=p2->name; p2->num=temp->num; p2->mark=temp->mark; p2->name=temp->name;}void Commonbox::Sort() //对当前链表进行排序{ cout <<"Sorting..."<<endl; if (ListCount()<2) return; combox *temp=NULL,*p=NULL,*p1=NULL,*p2=NULL,*k=NULL; int n=ListCount(),i,j; p=head; for (i=1;inext; for (j=0;jnum > p1->num) { k=p1; } p1=p1->next; } if (p!=k)Swap(k,p); p=p->next; } cout <<"Complete successfully!"<<endl<<endl; return;}float Commonbox::Average() //计算平均成绩{ if (ListCount()==0) { cout <<"错误:当前的列表为空!"<mark; p=p->next; n++; } return float(sum)/n;}//-----类成员函数结束----------------------------------//===========================================================Commonbox student; //定义全局变量int Menu(){ cout <<"===========[主选单:]==========="<<endl; int n=1,select=-1; cout <<n++<<".输入学生成绩;"<<endl<<endl; cout <<n++<<".按学号排序;"<<endl<<endl; cout <<n++<<".按学号查找记录;"<<endl<<endl; cout <<n++<<".删除由学号指定的记录;"<<endl<<endl; cout <<n++<<".列出所有记录;"<<endl<<endl; cout <<n++<<".计算平均成绩;"<<endl<<endl; cout <<"0.退出;"<<endl<<endl; cout <>select; return select;}char Exit() //返回一个字符患,用于确认退出{ char s; cout<>s; return s;}void Input(int *num, string *name, int *mark) //输入学生信息{ cout <>*num; if (*num==-1)return; cin >>*name>>*mark; return;}void AddNew() //增加记录{ int num=0,mark=0; string name=""; cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl; Input(#, &name;, &mark;); while (num!=-1) { student.AddItem(num,name,mark); Input(#, &name;, &mark;); } return;}void DoFind() //按学号查找{ int num; cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl; do { cout <>num; if (num==-1)continue; student.Search(num); } while (num!=-1); return;}void DoDelete() //删除记录{ cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl; int num; do { cout <>num; if (num==-1)continue; student.RemoveItem(num); } while (num!=-1); return;}void ShowAverage() //输出平均数{ float avr=student.Average(); if (avr>0) { cout<<"共有记录:\t"<<student.ListCount()<<endl<<endl; cout<<"平均成绩:\t"<******-------int main(){ cout<<"Welcome!\n学生成绩管理系统\nVer 1.01\nBy FondBoy\n\n"; int select; char s; while (1) { select=Menu(); switch (select) { case 0: //退出程序 s=Exit(); if (s=='y' || s=='Y')return 0; break; case 1: //输入学生成绩 AddNew(); break; case 2: //按学号排序 student.Sort(); break; case 3: //按学号查找记录 DoFind(); break; case 4: //删除由学号指定的记录 DoDelete(); break; case 5: //列出所有记录 student.List(); break; case 6: //输出平均成绩 ShowAverage(); break; default: cout<<"无效输入!"<<endl; } } return 0;}//-------************-------//------!!!!!!---------EOF-[程序代码结束]-------------------
用汇编语言编写一个小程序(比如hello,word!)请懂的人帮忙提供源码
您正在看的汇编语言是:hello,world!win32汇编小程序。
首先我们看一个“复杂”的Win32汇编程序程序用来显示一个消息框--------------------------------------------------;文件名:3.asm .386 .model flat ,stdcallNULL equ 0MB_OK equ 0ExitProcess PROTO :DwordMessageBoxA PROTO :DWORD,:DWORD,:DWORD,:Dwordincludelib kernel32.libincludelib user32.lib .dataszText db "Hello, world!",0szCaption db "Win32Asm",0 .code start: push MB_OK lea eax,szCaption push eax lea eax,szText push eax push NULL call messageboxa xor eax,eax push eax call exitprocess end start--------------------------------------------------编译链接: 分下面两步进行: ml /c /coff 3.asm /subsystem:Windows /libpath:d:\masm7\lib 3.obj 第一步编译生成3.obj文件 /c 表示只编译,不链接 /coff 表示生成COFF格式的目标文件 第二步轿派链接生成3.exe文件 /subsystem:windows 表示生成Windows文件 /libpath:d:\masm7\lib 表示引入库的路径为:d:\masm7\lib。
在安装Masm32后,引入库位于Masm32\Lib目录下。
也可设置环境变量Lib的值:在dos提示符下键入Set Lib=d:\masm7\lib,这样“链接”就可简单写成: /subsystem:Windows 3.obj,试想一下,在程序调试过程中,修改源程序是常用的事啦,每次册中编译链接都要带/libpath:...那该有多烦人呢。
当然,我们也可在源程序中直接给出引入库的位置,这样,链接时就方便啦,如下: includelib d:\masm7\lib\kernel32.lib includelib d:\masm7\lib\user32.lib--------------------------------------------------执行:在dos提示符下键入3,回车,出现一个消闭姿贺息框,哈哈,真正的Win32程序!--------------------------------------------------深入分析: 看一下源程序,有这么两行:call messageboxa\call exitprocess。
大家一看都知道,这是子程序调用,但是我们并没写这样的子程序,事实上,这些是API函数。
作为函数,我们在调用时可能需要传送给函数一些参数,程序怎么知道传送的参数有哪些,类型是什么呢?就是通过函数原型定义,如下所示: ExitProcess PROTO :Dword MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:Dword 可以看出,ExitProcess有一个参数,MessageBoxA有四个参数,这些参数都是Dword类型。
在Win32中,参数的传递都是通过堆栈来完成的。
象MessageBoxA这个函数有四个参数,究竟是左边的先压入堆栈还是右边的先入栈呢?.model flat,stdcall给出了答案。
stdcall 指定参数是从右到左压入堆栈的,且调整堆栈是在子程序返回时完成的。
在源程序中不需要用“add sp,值”来保持堆栈平衡。
对MessageBox,在API手册中是这样定义的: int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of of message box UINT uType &n;您正在看的汇编语言是:hello,world!win32汇编小程序。
bsp; // style of message box ) ;所以会有我们的程序段: push MB_OK lea eax,szCaption push eax lea eax,szText push eax push NULL call messageboxa 看看上面的程序,不难想到,假如在写程序时,少往堆栈里压入一个数据,那将是一个致命的错误。
能不能将这种检查参数个数是否匹配的工作交给计算机来完成呢?这是可以的,INVOKE指令可以帮助我们完成这样的工作。
假如你的参数个数不正确,连接器将给出错误提示。
所以,极力建议你使用invoke代替call来调用子程序,当然,这不是绝对的。
使用invoke上面的指令就可简写成下面的样子,看起来简炼多啦,查错也方便啦! invoke messageboxa, NULL,addr szText,addr szCaption,MB_OK 另外,像NULL,MB_OK都是一些常量,这样的常量有很多,还有很多的结构,如果在我们的程序中一开始都写这么多的东西,可能一下子就把你吓怕啦,也容易出错,更不便于看程序的主要部分。
hutch整理的Windows.inc包含了WIN32编程所需要的常量和结构体的定义,我们可简单的用一个include指令将这些常量和结构的定义插入到我们的文件中: include d:\masm32\include\Windows.inc 但是Windows.inc中并不包含函数原型的声明,还要从其他的头文件中得到函数原型的声明,比如:messageboxa的原型声明在user32.inc文件中,exitprocess在kernel32.inc文件中。
这些头文件都放在 \masm32\include文件夹下。
还有,要用Windows.inc,必须使用option casemap:none,它的意思是告诉 MASM 要区分符号的大小写,譬如:start和START是不一样的。
否则,一个小小的程序,可能会出成百上千的错误呀! 其他的,就不再细说啦,到此,上面的程序可重新修改如下:-----------------------------------------------------------------;最终的结果 .386 ;表示要用到386指令 .model flat,stdcall ;32位程序,要用flat啦!;stadcall,标准调用 option casemap:none ;区别大小写include Windows.inc ;包括常量及结构定义include kernel32.inc ;函数原型声明include user32.incincludelib kernel32.lib ;用到的引入库includelib user32.lib .data;数据区,定义2个字符串szText db "Hello, world!",0szCaption db "Win32Asm",0 .code ;代码开始执行处start: invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK ;调用MessageBoxAPI函数 invoke ExitProcess,NULL ;程序退出 end start;结束------------------------------------编译链接: ml /c /coff /I d:\masm7\include 3.asm ;注意开关符识别大小写 /subsystem:Windows /libpath:d:\masm7\lib 3.obj /I d:\masm7\include 表示*.inc文件的位置,也可设置环境变量Set include=d:\masm7\include来简化操作,也可在程序中明确指出*.inc的位置。
前面讲的都是用两条指令来完成编译链接,实际上用一条指令也可完成,如下: ml /coff /I d:\masm7\include 3.asm / /subsystem:Windows /libpath:lib 若*.inc及引入库在源程序中都明确指出其位置,则可简化为: ml /coff 3.asm / /subsystem: