Benshark était engagé dans le développement de programmes en janvier 2003 et travaille depuis 19 mois. Parmi eux, le travail par intermittence est tout à cause des choses de mauvaise qualité développées par son propre manque d'expérience, ce qui conduit à des difficultés errantes et à l'emploi! Maintenant, Bensha a atteint la capacité d'un programmeur qualifié.
De manière générale, la tâche de développement des programmeurs nouvellement diplômés n'est qu'un module dans un sous-projet d'un projet. Un module a près de 5 à 6 formulaires avec un volume de code d'environ 2 000 lignes. En fait, cette quantité de tâches n'est pas aussi bonne que la conception de la remise des diplômes, donc elle devrait être achevée, mais le temps de développement est relativement faible, environ 6 à 12 jours ouvrables, plutôt que 1 à 2 mois à l'école, et Il y a aussi des camarades de classe pour vous aider. Il est donc compétent dans les outils de développement des développeurs, la syntaxe, les cadres et les bibliothèques. De plus, vous pouvez comprendre le mécanisme de fonctionnement de la plate-forme du système et les exigences d'algorithme et savoir ce qui se passe. Il est nécessaire que les programmeurs puissent travailler activement plutôt que passivement. Peut prendre l'initiative de trouver des informations, de demander des collègues et de demander aux collègues de fournir une assistance avec des tâches inconnues.
Ce requin est principalement engagé dans les tâches de développement de la réception du système de base de données, il utilise donc principalement des composants de base de données communs pour illustrer que les tâches de la réception du système de données sont les plus lourdes et sont toujours critiquées par les utilisateurs.
Généralement, les étapes de développement de ce requin sont:
0 Comprendre les exigences de la tâche
1. Implémentez d'abord la fonction
2. Résoudre la gestion de l'exception de la fonction
3. Atteindre la convivialité
4 Résoudre une convivialité
Le problème de performance sera laissé à l'utilisateur pour le résoudre si le volume de données est important à l'avenir! À l'heure actuelle, il est important de rattraper la tâche. Les composants suivants sont couramment utilisés
Tedit tcombobox tlistview ttreeview tchecklistbox tlabel tdbgrid timage tmemo tbutton tdbchart tpanel tmaskedit tdatetimepicker tpageControl
1. Le style de code. .
2 paramètres d'attribut composant
1 TLABEL: AutoSize = Flase;
2 TEDIT Définissez la valeur de la méthode d'entrée par défaut de valeur maxLength
3 TCOMBOBOX Si seule la sélection est autorisée, style: = CSDropDownlist;
Lors de l'ajout de données à ses éléments
Fontcombo-> items-> BeginUpDate ();
Fontcombo-> items-> add ("xxx");
Fontcombo-> éléments-> endupdate ();
Peu importe la quantité de données TListView TtreeView TDBGIRD a des fonctions de blocage d'affichage de données similaires.
4 ttreeView Si vous ne modifiez pas le texte du nœud, vous devez lecture RowsElect = True;
5 Tlistview ViewStyle VSReportTreadonly RowsElect = True;
6 tpageControl pageControl1.activePageIndex: = 0;
7 tdatetimepicker dateFormat: = dflong si le temps est copié pour modifier
Edit.text: = dateTimeFormate ("yyyy-mm-dd", datetimepicker1.date)
8 tbutton pour définir l'annulation
3 composants avec la même disposition d'interface doivent être placés ensemble et alignés sur les environs, en bas, en gauche et en droite. conteneur parent, et enfin le donner aux gens.
Détails de mise en page d'interface
1): Utilisez des boutons de trame pour encadrer qui remplissent les fonctions mêmes ou similaires, et les boutons couramment utilisés doivent prendre en charge les raccourcis.
2): Des éléments qui remplissent la même fonction ou la même tâche sont placés dans une position centralisée pour réduire la distance du mouvement de la souris.
3): Divisez les blocs locaux de l'interface en fonction de la fonction, enfermez-les avec une boîte à cadre et ayez une description ou un titre de fonction.
4): L'interface doit prendre en charge la fonction du bouton de navigation automatique du clavier, c'est-à-dire la fonction de commutation automatique de la touche de l'onglet.
5): Les commandes qui devraient d'abord saisir et les informations importantes sur l'interface doivent être devant l'ordre de l'onglet, et doivent également être placées dans une position plus visible sur la fenêtre.
6): Il est préférable de ne pas dépasser 10 contrôles sur la même interface.
7): L'interface de pagination doit prendre en charge la commutation rapide entre les pages, et l'onglet combinaison combinée couramment utilisé Ctrl +
8): Le bouton par défaut doit prendre en charge les opérations ENTER et SELECT, c'est-à-dire qu'après appuyer sur Entrée, les opérations correspondantes du bouton par défaut sont automatiquement exécutées.
9): Une fois que le contrôle écrite détecte l'entrée illégale, la description doit être donnée et l'accent peut être obtenu automatiquement.
10): L'ordre des clés d'onglet et l'ordre des commandes doivent être cohérents.
11): Les cases à cocher et les cases d'option sont organisées les unes après les autres en fonction du bas élevé de la probabilité de sélection.
12): Les cases à cocher et les cases d'option doivent avoir des options par défaut et la sélection des onglets de prise en charge.
13): Lorsque le nombre d'options est le même, utilisez la zone d'option au lieu de la zone de liste déroulante.
14): Utilisez la boîte déroulante au lieu de la case d'option lorsque l'espace d'interface est petit.
15): Lorsque le nombre d'options est appelé petit, utilisez la zone d'option, utilisez plutôt la zone de liste déroulante.
16): Les logiciels avec un professionnalisme fort devraient utiliser des termes professionnels pertinents, tandis que l'interface universelle préconise l'utilisation de mots universels.
4 codes
1 inspection fonctionnelle: vérifiez si toutes les fonctions et restrictions requises par les exigences sont mises en œuvre
2 Vérification des limites: effectuez des vérifications aux limites des fonctions telles que la saisie de différents types de données ou les données de différentes gammes
3 Vérification d'accès illégal: testez s'il existe une erreur illégale d'accès à la mémoire. Le message d'erreur de référence pour déterminer s'il appartient à ce type d'erreur est similaire:
«… Non trouvé», «Liste d'index des limites…», «Accès à la violation à l'adresse…»
4: Vérification des informations sur l'information: Entrez tous les caractères à volonté, y compris les boîtes de modification, les boîtes de table et les boîtes de sélection, y compris les caractères anglais et chinois, tester si des erreurs d'accès illégales seront causées et si des caractères inacceptables seront utilisés. et des conseils à guider.
5 Inspection basée sur l'unité: Vérifiez si la description de l'en-tête de l'unité dans cette unité, la description de chaque fonction et la description de l'annotation sont correctes. Instructions de citation: y a-t-il des citations supplémentaires
// en particulier, si le fichier d'en-tête C ++ contient des problèmes inutiles, des problèmes inutiles se produiront pour d'autres unités.
En fait, ceux-ci sont appelés tests en col blanc et contenu des tests unitaires. Si vous voulez écrire du code de test en fonction du livre des tests, je pense que chaque développeur n'en veut pas! Mais cela ne fonctionnera pas, il est facile de faire des erreurs et de le rendre difficile à livrer. Par conséquent, il est très nécessaire de comprendre les méthodes de test, ces méthodes
Il y a des introductions à l'ingénierie logicielle dans les universités et les concepteurs de logiciels doivent également être pris. Chaque fois que vous rédigez un programme, vous ferez attention à considérer les erreurs qui peuvent se produire dans différentes situations! Bien que les variables à utiliser lors de la mise en œuvre de la fonction seront-elles vides? La valeur est-elle valide? Est-ce un débordement? Effacez-vous l'espace de la variable? Est-ce une exigence de cas? Y a-t-il des espaces devant et après?
Ces jugements doivent d'abord être écrits dans la fonction et le début du processus!
if (TreeView-> sélectionné == null) // La variable sera-t-elle vide?
puis retourne;
std :: vecotr <nt> intarray; // fait un débordement?
if (intarray <= 0)
Puis retourne;
if (i <listView.items-> count) // déborde-t-il et franchisse la frontière?
Edit-> text = listView-> items-item [i] .caption;
Edit-> text.trim (); // y a-t-il un espace avant et après?
char a [10];
memcpy (a, "/ 0", 10); // effacez-vous l'espace de la variable?
a [9] = 'i';;
// La personne qui utilise votre fonction écrit une boucle pour appeler votre variable de fonction apportera la dernière valeur. Les conditions de jugement de l'appelant perdront leur effet!
if (name.trim () == "Delphi") alors name = "bcb";
switch () {case à casser;
5 données par défaut, invites, positionnement et convivialité
Lorsque l'interface est affichée, les données seront affichées par défaut.
ComboBox1.ItemIndex: = 0;
De manière générale, de nouveaux ajouts et modifications seront modifiés dans une seule paire à l'aide d'une interface. Lorsque le nouvel ajout est terminé, tous les composants doivent être positionnés sur l'enregistrement nouvellement ajouté, et il en va de même pour la modification. Lors de la suppression, localisez le record suivant.
ListView et DBGird pour avoir la fonction de tri Cliquez sur le titre pour monter / baisser par date numérique
ListView et DBGird Lorsque la mise au point des données sélectionnée est déplacée sur le bouton, quelle ligne est actuellement sélectionnée? !
void __fastCall tfrmgather760 :: lvdatacustomDrawitem (tCustomListView * Sender, tListItem * item, tCustomDrawstate State, bool & defaultDraw) // Ce code dessinera un bas jaune sur la ligne sélectionnée
{
if (expéditeur-> sélectionné! = null)
if (item-> index == Sender-> sélectionné-> index)
{
Sender-> Canvas-> Brush-> color = Clyellow;
Sender-> Canvas-> font-> color = clblue;
}
}
Pour les opérations qui dépassent généralement 2 secondes, elle doit être dans la fonction.
Tcursor OldCursor;
OldCursor = Screen-> Cursor;
Screen-> Cursor = CRSQLWAIT;
essayer{ . . . . . . } __ Enfin {Screen-> Cursor = OldCursor;}
Procédure tform1.formKeyDown (Sender: TOBject; Var Key: Word; Shift: TshiftState);
Commencer
if (shift = []) et (key = vk_return) alors // Remplacez la touche de tab
Perform (wm_nextdlgctl, 0, 0);
Si key = vk_next alors // appuyez sur PageUp Pagedown pour fabriquer la page TpageControl Switch
Commencer
Si pageControl.activePageIndex = PageControl.PageCount - 1 alors
PageControl.activePageIndex: = 0
autre
PageControl.activePageIndex: = pageControl.activePageIndex + 1;
fin
sinon si key = vk_prior alors
Commencer
Si pageControl.activePageIndex = 0 alors
PageControl.activePageIndex: = PageControl.PageCount - 1
autre
PageControl.activePageIndex: = pageControl.activePageIndex - 1;
fin;
fin;
fin.
Échange à 6 bouton
Chaque fois qu'une opération est terminée, certains boutons deviendront invalides et dans quelles circonstances seront-elles restaurées à la validité? Bien qu'il n'y ait qu'un seul paragraphe, s'il n'est pas déterminé, il provoquera souvent diverses erreurs fatales! Parce que vous ne pouvez pas prédire comment les utilisateurs exploiteront votre logiciel, vous pouvez utiliser Rose pour dessiner un diagramme d'état ou utiliser Word pour le représenter!
7 performances
Lorsqu'il y a plus de 100 données, les composants d'affichage de données tels que ComboBox Listbox TreeView ListView DBGrid sont entrés et interrogent lors de la saisie.
Soutenir les requêtes floues n'est rien de plus que «% xxx%».
void __fastCall tfrmgather760 :: edt_namekeypress (Tobject * expéditeur, char & key)
{
if (key! = vk_return)
retour;
String ssql;
ssql = "Sélectionner le nom comme nom, les ventes en tant que ventes, de l'employé";
ssql + = "où le nom comme '%" + minuscules (edt_name-> text.trim ()) + "%'";
Tfrmpubdlg * pubdlg = new tfrmpubdlg (this);
PubDlg-> EXECUTEQUERY (SSQL);
Pubdlg-> ShowModal ();
.....
}
8 autres
Lors du développement d'un module, les unités individuelles et le DFM sont utilisés comme unités communes. Fera une structure de transmission de caractère dans l'unité
Nom de table structure
{
Nom de chaîne;
Chaîne filedName;
......
};;
std :: vector <string> serrorarry // invite d'erreur unifiée
Et le segment de resoucstring de Delphi peut être des ressources et plus faciles à localiser
Lors de l'ajout et de la modification, toutes les vérifications des données sont concentrées sous le bouton Enregistrer
void __fastCall tform3 :: btn_saveclick (expéditeur)
{
if (edt_name-> text.isempty ())
{
ShowMessage ("");
Edit_name-> setFocus ();
retour;
}
ModalResult = MROK;
}
La plupart des conceptions de remise des diplômes des élèves à l'école sont des bases de données, telles que deux ou trois couches. Vous devez sérieusement faire le programme de conception des diplômes et dépenser de l'argent pour demander à vos camarades de classe de vous aider à faire le test et de proposer une plus grande commodité opérationnelle. Ce n'est qu'en réussissant les tests d'autres personnes que votre capacité peut être améliorée, et la majeure partie du code est la gestion des exceptions et conviviale! Il sera très facile de trouver une bonne entreprise lorsque vous cherchez un emploi avec vos œuvres
En fait, lorsqu'il est engagé dans le développement de la réception de la base de données, la chose importante est d'écrire du code convivial!